2013-01-08 10 views
5

Ho un servizio WCF e un client Silverlight 5. ho definito le seguenti interfacce:Ottenere un errore: Contratto richiede Duplex, ma Binding 'BasicHttpBinding' non lo supporta o non è configurato correttamente per supportarlo

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

E questo è il mio file web.config:

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

Quando provo ad eseguire il servizio ottengo:

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 so che ho bisogno di aggiungere alcune proprietà a Web.config, ma ovunque guardassi (e qualunque cosa provassi) non riuscivo a farlo funzionare.

Sono nuovo a WCF e mi piacerebbe il vostro aiuto su questo argomento. Tutti i miei googling non mi portano da nessuna parte e le risposte che le persone che hanno posto qui la stessa domanda non funzionano per me.

Quindi ho deciso di rinunciare alla ricerca e basta chiedere.

Aggiornamento: Ho usato questo link per creare l'interfaccia - http://msdn.microsoft.com/en-us/library/cc645027%28v=vs.95%29.aspx

risposta

13

Se questo è l'estensione della configurazione web.config per WCF, allora vi manca la sezione che definisce il contratto:

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

Se si specifica questa sezione, l'altra causa probabile è che il nome del contratto non è completo; deve includere lo spazio dei nomi completo e non solo il nome del contratto.

Ecco la configurazione System.ServiceModel completo:

<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 questo caso, lo spazio dei nomi applicazione è WebApplication1, nome della classe del servizio è Service1 (cioè Service1.svc) e l'interfaccia che implementa Service1 è IService1 .

+0

Puoi spiegare quali sono 'MyService',' MySLServiceBehavior', 'MySLService',' IMyService' e 'IMetadataExchange'? Questo non è così ovvio agli occhi di un principiante. Inoltre non ho bisogno di aggiungere alcune proprietà ''? – assafmo

+1

Pulito leggermente la risposta per renderlo più comprensibile e ha aggiunto la configurazione completa. –

+0

Grazie, ma continuo a non vedere la configurazione completa. – assafmo

Problemi correlati