2013-01-08 14 views
5

Ich habe einen WCF-Dienst und einen Silverlight 5-Client. I definiert haben folgende Schnittstellen:Fehler erhalten: Vertrag erfordert Duplex, aber Binding 'BasicHttpBinding' unterstützt es nicht oder ist nicht richtig konfiguriert, um es zu unterstützen

[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); 
} 

Und das ist meine Datei Web.config:

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

Wenn ich versuche, den Dienst auszuführen, erhalte ich:

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 Ich weiß, dass ich einige Eigenschaften zu Web.config hinzufügen muss, aber wo auch immer ich hinsah (und was auch immer ich versuchte), ich konnte es nicht zum Laufen bringen.

Ich bin neu in WCF und ich hätte gerne Ihre Hilfe zu diesem Thema. All mein Googeln führt mich nirgendwohin und die Antworten, die Leute, die hier die gleiche Frage gestellt haben, haben nichts für mich.

Also habe ich beschlossen, die Suche aufzugeben und einfach zu fragen.

Update: ich diesen Link verwendet, um die Schnittstelle zu erstellen - http://msdn.microsoft.com/en-us/library/cc645027%28v=vs.95%29.aspx

Antwort

13

Wenn das der Umfang Ihrer web.config Konfiguration für WCF ist, dann sind Sie nicht den Abschnitt, der definiert, Ihren Vertrag:

Wenn Sie diesen Abschnitt angegeben haben, ist der andere mögliche Grund, dass der Vertragsname nicht vollständig qualifiziert ist; Es muss den vollständigen Namespace und nicht nur den Namen des Vertrags enthalten.

Hier ist die vollständige System.ServiceModel Konfiguration:

<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> 

In diesem Fall ist die Anwendung Namespace WebApplication1, den Klassennamen des Service ist Service1 (dh Service1.svc) und die Schnittstelle, die Service1 implementiert wird IService1 .

+0

Können Sie bitte erklären, was 'MyService',' MySLServiceBehavior', 'MySLService',' IMyService' und 'IMetadataExchange' sind? Das ist in den Augen eines Anfängers nicht so offensichtlich. Muss ich auch keine '' Eigenschaft hinzufügen? – assafmo

+1

Die Antwort wurde etwas aufgeräumt, um sie verständlicher zu machen und um die vollständige Konfiguration hinzuzufügen. –

+0

Vielen Dank, aber ich sehe immer noch nicht die vollständige Konfiguration. – assafmo