2011-09-01 17 views
7

Soy un novato para llamar a los servicios web de WCF, así que espero que esta sea una pregunta fácil. Cuando llamo a un servicio web con .NET 4 winform client, ¿cómo cambio el esquema de autorización de Anonymous a NTLM?cómo llamar al servicio web utilizando el esquema de autorización NTLM?

En este momento recibo la excepción: La solicitud HTTP no está autorizada con el esquema de autenticación del cliente 'Anónimo'. El encabezado de autenticación recibido del servidor fue 'NTLM'.

Mi objetivo es construir una pequeña herramienta que me ayude a controlar el almacén de datos y el cubo de TFS 2010. TFS proporciona un servicio web WarehouseControlWebService. Puedo llamar al servicio a través del modo de prueba en un navegador cuando inicie sesión en el servidor. Sin embargo, estoy tratando de llamar al mismo servicio web de forma remota, desde mi escritorio. Mi cuenta de usuario está en el grupo Administradores local en el servidor.

He creado un .NET 4 WinForm con el canónico Button1 y TextArea1. Luego añade una referencia de servicio para el servicio web y creativamente llamé ServiceReference1:

Add Service Reference... 
http://tfssvr:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx 

Y aquí está mi código detrás:

private void button1_Click(object sender, EventArgs e) 
{ 
    // Creating a proxy takes about 3-4 seconds 
    var dwSvc = new ServiceReference1.WarehouseControlWebServiceSoapClient(); 

    // Invoking the method throws an MessageSecurityException 
    var dwStatus = dwSvc.GetProcessingStatus(null, null, null); 
} 

Me estoy System.ServiceModel.Security.MessageSecurityException:

La solicitud HTTP no está autorizada con el esquema de autenticación de cliente 'Anónimo'. El encabezado de autenticación recibido del servidor fue 'NTLM'.

He tratado de pasar a través de mis credenciales:

dwSvc.ClientCredentials.Windows.ClientCredential = 
    new System.Net.NetworkCredential("user", "pass", "domain"); 

y además ...

dwSvc.ClientCredentials.Windows.ClientCredential = 
    CredentialCache.DefaultNetworkCredentials; 

Estoy vadeando a través de la documentación de WCF, pero ... oh chico ... Hay mucho allí. Espero que esto sea algo fácil?

Gracias de antemano.

+0

Por favor, vea http://meta.stackexchange.com/questions/2950/should-hi-thanks -taglines-and-salutations-be-removed-from-posts –

Respuesta

6

Establecer las fijaciones de configuración a modo de seguridad = "TransportCredentialOnly" y clientCredentialType transporte = "NTLM"

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="WarehouseControlWebServiceSoap" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Ntlm" proxyCredentialType="None" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://tfsServer:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx" 
      binding="basicHttpBinding" bindingConfiguration="WarehouseControlWebServiceSoap" 
      contract="TfsWarehouse.WarehouseControlWebServiceSoap" name="WarehouseControlWebServiceSoap" /> 
    </client> 
</system.serviceModel> 
+0

Intenté utilizar esta configuración, sin embargo, nuestro servidor solo es accesible a través de https, así que lo reemplacé con 'wsHttpBinding' y' TransportWithMessageCredential'. No funciona, arroja '" La solicitud HTTP no está autorizada con el esquema de autenticación del cliente 'Anónimo'. El encabezado de autenticación recibido del servidor fue 'NTLM'. "' Error. ¿Tienes alguna sugerencia sobre cómo hacer que funcione con 'wsHttpBinding'? –

+0

Obtuve esto funcionando en Visual Studio 2010. Obtuve cosas diferentes con errores en las nuevas versiones de Visual Studio. Generan diferentes archivos de configuración. –

0

Estás mirando en la dirección correcta. Esta es una buena página con información de nivel de ejemplo sobre los métodos de autenticación disponibles que necesita: http://man.ddvip.com/web/bsaspnetapp/LiB0087.html. Al menos esa página debería darte más pistas para continuar tus esfuerzos.

Cuestiones relacionadas