2013-01-08 8 views
5

Mam usługę WCF i klienta Silverlight 5. Mam zdefiniowane następujące interfejsy:Błąd: Umowa wymaga dupleksu, ale powiązanie 'BasicHttpBinding' nie obsługuje go lub nie jest poprawnie skonfigurowane do jego obsługi.

[ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IDuplexClient))] 
public interface IDuplexService 
{ 
    [OperationContract] 
    void Subscribe(string userId); 

    [OperationContract] 
    void Unsubscribe(string userId); 
} 

[ServiceContract] 
public interface IDuplexClient 
{ 
    [OperationContract(IsOneWay = true)] 
    void PushNotification(string msg); 
} 

i to jest mój plik Web.config:

<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
</configuration> 

Gdy próbuję uruchomić usługę uzyskać:

The service '/ServerService.svc' cannot be activated due to an exception during compilation. The exception message is: Contract requires Duplex, but Binding 'BasicHttpBinding' doesn't support it or isn't configured properly to support it.

I wiem, że muszę dodać pewne właściwości do Web.config, ale gdziekolwiek spojrzę (i cokolwiek próbowałem) nie mogę sprawić, żeby działało.

Jestem nowy w WCF i chciałbym twojej pomocy w tej sprawie. Całe moje szukanie w Google nie prowadzi mnie donikąd, a odpowiedzi, które zadawali tutaj to samo pytanie, nie działają dla mnie.

Więc postanowiłem zrezygnować z wyszukiwania i po prostu zapytać.

Aktualizacja: Kiedyś ten link, aby utworzyć interfejs - http://msdn.microsoft.com/en-us/library/cc645027%28v=vs.95%29.aspx

Odpowiedz

13

Jeśli to jest zakres konfiguracji web.config dla WCF, to brakuje sekcję który definiuje umowę:

<services> 
    <service name="WebApplication1.Service1"> 
    <endpoint address="" binding="wsDualHttpBinding" contract="WebApplication1.IService1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

Jeśli masz tę sekcję, to inną prawdopodobną przyczyną jest to, że nazwa kontraktu nie jest w pełni kwalifikowana; musi zawierać pełny obszar nazw, a nie tylko nazwę umowy.

Oto pełna konfiguracja System.ServiceModel:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="WebApplication1.Service1"> 
     <endpoint address="" binding="wsHttpBinding" contract="WebApplication1.IService1" /> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     </service> 
    </services> 
    </system.serviceModel> 

W tym przypadku aplikacja jest AplikacjaWeb1 nazw, nazwę klasy danej usługi, jest Service1 (tj Service1.svc) i interfejs, który implementuje Service1 jest IService1 .

+0

Czy możesz wyjaśnić, czym są "MyService", "MySLServiceBehavior", 'MySLService',' IMyService' i 'IMetadataExchange'? Nie jest to oczywiste w oczach początkującego. Nie muszę też dodawać własności ''? – assafmo

+1

Poprawiono nieco odpowiedź, aby była bardziej zrozumiała i dodano pełną konfigurację. –

+0

Dziękuję, ale nadal nie widzę pełnej konfiguracji. – assafmo

Powiązane problemy