2010-11-18 15 views
0

Gibt es eine Möglichkeit, die Transportsicherheit, die normalerweise in der Konfiguration eines basicHttpBinding angegeben wird, zur Laufzeit einzustellen, möglicherweise durch die Implementierung von IEndpointBehavior?Legen Sie die Transportsicherheit für die WCF-Bindung mithilfe von IEndpointBehavior fest?

Im Wesentlichen diese nehmen:

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

Und verwenden Sie diese (oder etwas anderes) statt:

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

Ist es möglich, den Sicherheitsmodus zu ändern?

Antwort

0

Ich glaube nicht, dass dies über ein Endpunktverhalten möglich ist. Verhaltensweisen können die Bindungskonfiguration nicht früh genug ändern.

Wie auch immer, es kann in Code anders gemacht werden. Der Basichttpbinding hat einen Konstruktor Überlastung, die der Sicherheitsmodus erlaubt angegeben werden:

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

Dies muss getan werden, bevor der Dienst gestartet wird, und vorausgesetzt, dass Sie die Servicehost und Endpunkte schaffen sich.

+0

Ja, mein Problem ist, dass ich nicht glaube, dass ich die Kontrolle über die Erstellung der Bindung habe. Ich verwende eine Bibliothek von Drittanbietern, die ein Argument von IList verwendet, aber es mir nicht erlaubt, verbindliche Informationen anzugeben. –

+0

Ich habe etwas getan, das deinem Vorschlag ähnlich ist und habe die Erstellung der Bindung abgefangen. Das bedeutete, dass ich die 3rd-Party-Konfiguration nicht so verwenden konnte, wie sie vorgesehen war, aber das ist in Ordnung. –