.net - configurar - wcf endpoint configuration
Error de WCF: el servicio no autenticó a la persona que llama (11)
¿Has probado el uso de basicHttpBinding en lugar de wsHttpBinding? Si no necesita ninguna autenticación y las implementaciones de Ws- * no son necesarias, probablemente sea mejor con el simple basicHttpBinding. WsHttpBinding implementa WS-Security para seguridad y autenticación de mensajes.
Estoy intentando acceder a mi servicio WCF en un servidor desde la aplicación de mi consola cliente para realizar pruebas. Estoy teniendo el siguiente error:
La persona que llama no fue autenticada por el servicio
Estoy usando wsHttpBinding
. No estoy seguro de qué tipo de autenticación espera el servicio?
<behaviors>
<serviceBehaviors>
<behavior name="MyTrakerService.MyTrakerServiceBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
Actualizar Funciona si cambio mi enlace a <endpoint "basicHttpBinding" ... />
(desde wsHttpBinding) en el servidor IIS 7.0 alojado, Windows 2008
¿Por qué no puede simplemente eliminar la configuración de seguridad para wsHttpBinding ("ninguno" en lugar de "mensaje" o "transporte")?
Entiendo.
Si desea usar wshttpbinding, debe agregar las credenciales de Windows como se muestra a continuación.
svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";
Gracias
Esto puede deberse a que el cliente se encuentra en un dominio diferente al del servidor.
Me encontré con esto cuando probaba una de mis aplicaciones desde mi PC (cliente) a mi servidor de pruebas (en la nube) y la solución más simple que podía pensar era configurar un vpn.
Nos encontramos con un problema extraño en el que la carpeta donde se hospedaba el servicio WCF tenía algunos permisos que causaban el problema.
Si está utilizando un sitio alojado como yo, la forma de evitar este problema (como se describe arriba) es estipular en el lado del host y del cliente que el modo de seguridad wsHttpBinding = NINGUNO.
Al crear el enlace, tanto en el cliente como en el host, puede usar este código:
Dim binding as System.ServiceModel.WSHttpBinding
binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)
o
System.ServiceModel.WSHttpBinding binding
binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
Si usa basicHttpBinding, configure la seguridad del punto final en "Ninguno" y transporte clientCredintialType a "Ninguno".
<bindings>
<basicHttpBinding>
<binding name="MyBasicHttpBinding">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyService">
<endpoint
binding="basicHttpBinding"
bindingConfiguration="MyBasicHttpBinding"
name="basicEndPoint"
contract="IMyService"
/>
</service>
Además, asegúrese de que el directorio Authentication Methods in IIS habilite el acceso anónimo
También tuve el mismo problema en wsHtppBinding
. Y solo tuve que agregar el modo de security
apunta a none
, eso resolvió mi problema y no es necesario cambiar a basicHttpBinding
. Marque Aquí y compruebe cómo deshabilitar la seguridad de WCF. Verifique el siguiente cambio de configuración para referencia:
<wsHttpBinding>
<binding name="soapBinding">
<security mode="None">
<transport clientCredentialType="None" />
<message establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
establecer el acceso anónimo en su directorio virtual
escriba las siguientes credenciales a su servicio
ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";
después de eso, llama a los métodos de tu servicio web.
si es necesario para especificar el dominio (que autentica el nombre de usuario y la contraseña que usa el cliente) en webconfig, puede ponerlo en la sección del servicio de servicios system.serviceModel:
<identity>
<servicePrincipalName value="example.com" />
</identity>
y en el cliente especifique dominio y nombre de usuario y contraseña:
client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
client.ClientCredentials.Windows.ClientCredential.Password = "Password";