2009-01-30 15 views
8

Necesito conectarme a un servicio WCF que escribí sin tener que implementar un app.config para la aplicación cliente que estoy escribiendo. Sin embargo, he estado teniendo un momento muy difícil tratando de averiguar cómo configurar las cosas desde el lado del cliente en el código. Hasta aquí he llegado ... ¿alguien tiene alguna idea de lo que debo hacer para que esto funcione? Realmente lo apreciaría.Cómo configurar un cliente WCF usando wsDualHttpBinding en el código?

Este es el código que tengo hasta ahora:

String baseAddress = "http://localhost/CommService"; 

    WSDualHttpBinding binding = new WSDualHttpBinding(); 
    binding.Name = "WSDualHttpBinding_ICommService"; 
    binding.ClientBaseAddress = new Uri(baseAddress); 
    binding.ReliableSession.Ordered = true; 
    binding.ReliableSession.InactivityTimeout = new TimeSpan(0, 10, 0); 
    binding.ReceiveTimeout = new TimeSpan(0, 10, 0); 
    binding.SendTimeout = new TimeSpan(0, 0, 5); 

    InstanceContext context = new InstanceContext(this); 
    client = new CommServiceClient(context, "WSDualHttpBinding_ICommService"); 
    client.Endpoint.Binding = binding; 

Y esto es app.config de mi aplicación cliente:

<system.serviceModel> 
    <bindings> 
     <wsDualHttpBinding> 
      <binding name="WSDualHttpBinding_ICommService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:00:05" 
       bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <reliableSession ordered="true" inactivityTimeout="00:10:00" /> 
       <security mode="Message"> 
        <message clientCredentialType="Windows" negotiateServiceCredential="true" 
         algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </wsDualHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost/CommService/" 
      binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ICommService" 
      contract="Services.ICommService" name="WSDualHttpBinding_ICommService"> 
      <identity> 
       <dns value="localhost" /> 
      </identity> 
     </endpoint> 
    </client> 
</system.serviceModel> 

Respuesta

9

Se puede lograr fácilmente lo que desee. Véase a continuación Código:

Uri baseAddress = new Uri("http://localhost/CommService"); 
WSDualHttpBinding wsd = new WSDualHttpBinding(); 
EndpointAddress ea = new EndpointAddress(baseAddress, EndpointIdentity.CreateDnsIdentity("localhost")); 
client = new CommServiceClient(new InstanceContext(this), wsd, ea); 

Me explico un poco:

  • primer lugar debemos crear una instancia de un WSDualHttpBinding con la configuración predeterminada (esos son los exactos app.config generado tiene). Si desea modificar cualquiera de las configuraciones, puede modificarlas a través de las propiedades expuestas.
  • luego creamos una EndPointAddress con la URL y la identidad deseadas. No es necesario vincularlo con un enlace porque los vincularemos todos en el constructor de Service Client.
  • Por último, creamos el Cliente de servicio. Una de las sobrecargas del contructor nos permite especificar un enlace y una dirección de punto final.
  • en general, cada elemento disponible en el archivo app.config tiene una clase asociada en el código .NET y cada atributo o elemento hijo tiene una propiedad asociada en la clase especificada.
+1

Esto funcionó perfectamente, ¡gracias! Me estaba volviendo loco, jaja. –

Cuestiones relacionadas