2010-11-05 32 views
1

Je vais avoir du mal à comprendre cela. J'ai un service WCF dont j'ai besoin pour envoyer des informations au client Silverlight, mais j'ai besoin d'une application console pour pouvoir y participer. Quelqu'un pourrait-il me donner un indice sur ce à quoi mon Web.Config devrait ressembler pour spécifier une liaison supplémentaire à laquelle l'application console pourrait accéder? Quand je pense que je reçois des choses de travail les clients SL ne peuvent pas recevoir des messages ...Reliure WCF à reliure recto verso et clients autres que Silverlight

Voici mon web.config actuel:

<?xml version="1.0"?> 

<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.serviceModel> 
    <extensions> 
     <bindingExtensions> 
     <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     </bindingExtensions> 
    </extensions> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <!-- Create the polling duplex binding. --> 
    <bindings> 
     <pollingDuplex> 
     <binding name="myPollingDuplex" 
       duplexMode="MultipleMessagesPerPoll"> 
     </binding> 
     </pollingDuplex> 
    </bindings> 

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name ="EdiManager.Web.EdiPubSub"> 
     <endpoint address="" 
        binding="pollingDuplex" 
        bindingConfiguration="myPollingDuplex" 
        contract="EdiManager.Web.EdiPubSub" 
        /> 
     <endpoint address="mex" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" > 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 

Répondre

1

Si vous n'avez pas besoin en duplex intégral il suffit d'utiliser la place wsHttpBinding de mex (ou fournir plus d'informations que voulez-vous atteindre).

+0

Je savais que c'était ce que je devais faire. Le problème était lorsque j'ai ajouté un nouveau point de terminaison les clients Silverlight sont devenus sourds, alors j'espérais que quelqu'un pourrait montrer comment le point de terminaison serait créé. Je n'ai aucune idée de ce que je faisais de mal. Mais j'étais en train d'éditer la config à la main. Le samedi, quand j'ai recommencé, j'ai utilisé l'éditeur du service WCF et ça a bien fonctionné. Donc, je dois juste craindre cela à mon manque de compétences! Merci pour la suggestion, cependant. –

1

Voulez-vous que l'application de console participe également à la connexion duplex d'interrogation? Ou voulez-vous utiliser une liaison de requête-réponse différente?

En outre, je remarque que vous utilisez AspNetCompatibility avec le duplex d'interrogation. Si vous accédez à l'état de la session, vous rencontrerez des problèmes de performances. J'ai fait un short blog post à ce sujet qui fait référence à un MSDN blog post avec des informations de test.

En résumé, le duplex d'interrogation est une opération de longue durée. Les verrous d'état de session et aucune autre requête ne peuvent continuer jusqu'à ce que l'interrogation expire et avant qu'une autre connexion verrouille à nouveau le fournisseur d'état de session.

+0

Merci, Erik. Votre article de blog était très intéressant. –

0

J'ai réussi à le faire fonctionner en éditant la config avec l'éditeur du service WCF et en ne le faisant pas à la main. Clairement je faisais une erreur éditant la config manuellement. Voici le web.config qui fonctionne:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 

    <system.serviceModel> 
    <extensions> 
     <bindingExtensions> 
     <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     </bindingExtensions> 
    </extensions> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <!-- Create the polling duplex binding. --> 
    <bindings> 
     <wsDualHttpBinding> 
     <binding name="myDualHttp" /> 
     </wsDualHttpBinding> 
     <pollingDuplex> 
     <binding name="myPollingDuplex" duplexMode="MultipleMessagesPerPoll" /> 
     </pollingDuplex> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="EdiManager.Web.EdiPubSub"> 
     <endpoint address="Silverlight" binding="pollingDuplex" bindingConfiguration="myPollingDuplex" 
      name="Silverlight" contract="EdiManager.Web.EdiPubSub" /> 
     <endpoint address="Console" binding="wsDualHttpBinding" bindingConfiguration="myDualHttp" 
      name="Console" contract="EdiManager.Web.EdiPubSub" /> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration>