2010-11-18 24 views
0

Existe-t-il un moyen de définir la sécurité de transport normalement spécifiée dans la configuration d'un basicHttpBinding à l'exécution, éventuellement en implémentant IEndpointBehavior?Définir la sécurité du transport sur la liaison WCF à l'aide de IEndpointBehavior?

prendre essentiellement ceci:

<binding name="DfsAgentService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1000000" maxBufferPoolSize="10000000" maxReceivedMessageSize="1000000" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <security mode="None"/><!--Transport--> 
      </binding> 

Et utiliser (ou autre chose) à la place:

namespace Endpoints { 
    class DfsEndpoint : IEndpointBehavior{ 


     #region IEndpointBehavior Members 

     void IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters) { 
      throw new NotImplementedException(); 
     } 

     void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { 
      throw new NotImplementedException(); 
     } 

     void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { 
      throw new NotImplementedException(); 
     } 

     void IEndpointBehavior.Validate(ServiceEndpoint endpoint) { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 
} 

Est-il possible de changer le mode de sécurité?

Répondre

0

Je ne pense pas qu'il soit possible de le faire via un comportement de point de terminaison. Les comportements ne peuvent pas modifier la configuration de liaison assez tôt.

Cependant, cela peut être fait différemment avec le code. Le BasicHttpBinding a une surcharge constructeur qui permet le mode de sécurité à préciser:

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

Cela doit être fait avant que le service est démarré, et suppose que vous créez le ServiceHost et Endpoints vous.

+0

Oui, mon problème est que je ne pense pas avoir le contrôle sur la création de la liaison. J'utilise une bibliothèque tierce qui prend un argument de IList mais qui ne me permet pas de spécifier des informations de liaison. –

+0

J'ai fini par faire quelque chose de similaire à votre suggestion et j'ai intercepté la création de la liaison. Cela signifiait que je ne pouvais pas vraiment utiliser la configuration de 3ème partie de la façon dont il était prévu, mais ça va. –