2012-05-21 3 views
1

Je suis chargé de développer une application Silverlight qui devrait consommer le service WCF. Le service a uniquement exposé le point de terminaison à l'aide de WsHttpBinding. Comme je l'ai compris, il est impossible de consommer ce service dans l'application silverlight (le WsHttpBinding nécessite-t-il un support spécial du système d'exploitation?).Comment protéger la connexion au service WCF? Silverlight consommant le service WCF avec WsHttpBinding.

Chaque appel au service comporte des informations d'identification utilisateur en tant que paramètres.

C'est ainsi que la configuration du service généré cherche application .NET 4:

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
      <binding name="WSHttpBinding_IScheduleService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
       allowCookies="false"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" 
        enabled="false" /> 
       <security mode="Transport"> 
        <transport clientCredentialType="None" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
       </security> 
      </binding> 
     </wsHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="blahblah/Service.svc/ws" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IScheduleService" 
      contract="ScheduleService.IScheduleService" name="WSHttpBinding_IScheduleService"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Désolé pour la longue introduction, et il y a la question.

Quelles sont les approches courantes dans le monde Silverlight pour protéger la connexion au service WCF? Comment changer le service, être consommable par le client Silverlight?

Répondre

2

L'approche la plus courante consiste à utiliser la sécurité de transport (ssl) - comme vous le faites avec ce paramètre. Le seul problème ici peut être que wshttpbinding s'attend à ce que le message de savon du client contienne des en-têtes ws-adressage (vérifiez-le avec fiddler ou wcf logging) que silverlight ne peut pas supporter.

Je dirais - si vous êtes en mesure de changer le service à basicHttpBinding c'est le meilleur. Sinon, vous pouvez toujours le faire, mais vous devrez insérer manuellement les en-têtes dans le message de savon. écrivez un client de savon de travail (winforms) et voyez comment le savon il envoie des regards. puis utilisez message inspector on silverlight pour l'ajouter.

Questions connexes