svcutil - ¿Cómo configurar el proxy con credenciales para el cliente WCF generado?
wcf c# (3)
Tengo un problema para conectarme a mi servicio WCF si el cliente usa un proxy con credenciales. No puedo encontrar la manera de establecer la credencial para el proxy del cliente generado.
Si utilizo el servicio web, entonces es posible configurar el proxy.
No estoy del todo seguro de si esto es lo que estás buscando, pero aquí tienes.
MyClient client = new MyClient();
client.ClientCredentials.UserName.UserName = "u";
client.ClientCredentials.UserName.Password = "p";
No estoy seguro de si esto es lo que está buscando, pero a continuación se muestra un código de trabajo para autenticar utilizando las credenciales del cliente.
Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "username"
client.ClientCredentials.UserName.Password = "password"
Dim ProductList As List(Of Product) = client.GetProducts()
mView.Products = ProductList
client.Close()
Resolví esto agregando un usuario de Active Directory al Pool de aplicaciones> Identidad en lugar de servicios de red. Este usuario también está en un grupo que tiene permiso para navegar por Internet a través del servidor proxy. También agregue este usuario al grupo IIS_WPG en el servidor host del cliente.
En el código siguiente, el primer bit autentica al cliente con el servicio WCF. El segundo bit supone pasar los crendentials al servidor proxy interno para que el cliente llame a un servicio WCF en el servidor DMZ. Pero no creo que la parte de proxy funcione. De todos modos, estoy dejando el código.
// username token credentials
var clientCredentials = new ClientCredentials();
clientCredentials.UserName.UserName = ConfigurationManager.AppSettings["Client.Mpgs.Username"];
clientCredentials.UserName.Password = ConfigurationManager.AppSettings["Client.Mpgs.Password"];
proxy.ChannelFactory.Endpoint.Behaviors.Remove(typeof(ClientCredentials));
proxy.ChannelFactory.Endpoint.Behaviors.Add(clientCredentials);
// proxy credentials
//http://kennyw.com/indigo/143
//http://blogs.msdn.com/b/stcheng/archive/2008/12/03/wcf-how-to-supply-dedicated-credentials-for-webproxy-authentication.aspx
proxy.ChannelFactory.Credentials.Windows.ClientCredential = new System.Net.NetworkCredential
(
ConfigurationManager.AppSettings["Client.ProxyServer.Username"]
, ConfigurationManager.AppSettings["Client.ProxyServer.Password"]
, ConfigurationManager.AppSettings["Client.ProxyServer.DomainName"]
);
En mi web.config he usado lo siguiente,
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy usesystemdefault="True" proxyaddress="http://proxyServer:8080/" bypassonlocal="False" autoDetect="False" /> </defaultProxy>
</system.net>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ITest" 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="TransportWithMessageCredential">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" negotiateServiceCredential="true" algorithmSuite="Default"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://wcfservice.organisation.com/test/test.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ITest" contract="Test.Test" name="WSHttpBinding_ITest"/>
</client>
</system.serviceModel>
El código anterior funciona desde mi máquina local. Cuando cargo el código en un servidor de desarrollo, no funciona. Miré los registros del servidor proxy y se muestra a continuación,
2011-06-14 05:21:10 2 11.11.11.11 - - authentication_failed DENEGADO "Organización / Finanzas" - 407 TCP_DENIED CONNECT - tcp wcfservice.organisation.com 443 / - - - 11.11.11.11 612 161 -
2011-06-14 05:21:10 6 11.11.11.152 ServerName $ - policy_denied DENIED "Organización / Finanzas" - 403 TCP_DENIED CONNECT - tcp wcfservice.organisation.com 443 / - - - 11.11.11.205 185 361 -
Nuestro administrador del sistema inteligente DF agregó un usuario de Active Directory al Pool de aplicaciones> Identidad en lugar de servicios de red. Este usuario también está en un grupo que tiene permiso para navegar por Internet a través del servidor proxy. También agregue este usuario al grupo IIS_WPG en el servidor host del cliente.
Esto funcionó para mí.