Estoy usando un servicio de wcf que he creado, cuando tanto la máquina de host como la máquina de cliente están en el mismo dominio todo funciona bien. Cuando publico la aplicación cliente al servidor web en la DMZ estoy consiguiendo el error siguiente:WCF Fallo en la negociación de la interfaz de proveedor de soporte de seguridad (SSPI)
SOAP security negotiation with 'http://10.0.0.14:3790/Bullfrog/QBService/QBService' for
target 'http://10.0.0.14:3790/Bullfrog/QBService/QBService' failed. See inner exception
for more details.The Security Support Provider Interface (SSPI) negotiation failed.
Aquí es mi servicio principal, donde puedo configurar el servicio
Uri baseAddress = new Uri("Http://10.0.0.14:3790/Bullfrog/QBService");
ServiceHost selfHost = new ServiceHost(typeof(QBService), baseAddress);
try
{
selfHost.AddServiceEndpoint(
typeof(IQBService),
new WSHttpBinding(),
"QBService");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
Console.WriteLine("The service is ready");
}
catch (CommunicationException ce)
{
//log.Error(ce.Message, ce);
Console.WriteLine(ce.Message, ce);
selfHost.Abort();
}
y aquí está el config apartado de mi cliente
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IQBService" 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="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://10.0.0.14:3790/Bullfrog/QBService/QBService"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IQBService"
contract="IQBService" name="WSHttpBinding_IQBService">
<identity>
<userPrincipalName value="[email protected]" />
</identity>
</endpoint>
</client>
estoy seguro de la problema es porque está usando la autenticación de Windows. ¿Algunas ideas? ¡Gracias!
No estoy 100% seguro, así que no estoy publicando esto como respuesta, pero la autenticación IMO de Windows solo es posible si tanto el cliente como el servidor están en el mismo dominio o en dominios de confianza. Por cierto. si tanto la red interna como DMZ son parte de la infraestructura de su empresa, ¿por qué eligió WsHttpBinding con seguridad de mensajes? Es la elección más lenta. –
si tanto la red interna como DMZ son parte de la infraestructura de su empresa, ¿por qué eligió WsHttpBinding con seguridad de mensajes? - porque no sé de otra manera :) ¿Qué debo usar? Como he mencionado, estoy seguro de que es la autenticación de Windows la que está causando el problema. Entonces, ¿qué necesito usar en su lugar? Gracias! – twal