2011-09-01 10 views
7

Sono un noob per chiamare i servizi web WCF, quindi spero che questa sia una domanda facile. Quando si chiama un servizio Web con .NET 4 Winform Client, come posso modificare lo schema di autorizzazione da Anonimo a NTLM?come chiamare il servizio Web utilizzando lo schema di autorizzazione NTLM?

In questo momento sto ricevendo l'eccezione: La richiesta HTTP non è autorizzata con lo schema di autenticazione del client 'Anonimo'. L'intestazione di autenticazione ricevuta dal server era "NTLM".

Il mio obiettivo è creare un piccolo strumento per aiutarmi a monitorare il data warehouse e il cubo di TFS 2010. TFS fornisce un servizio Web WarehouseControlWebService. Posso chiamare il servizio tramite la modalità Test in un browser quando si accede al server. Tuttavia sto provando a chiamare lo stesso servizio Web da remoto, dal mio desktop. Il mio account utente è nel gruppo Administrators locale sul server.

Ho creato un .NET 4 WinForm con il canonico Button1 e TextArea1. Ho poi aggiunto un riferimento al servizio al servizio Web e creativamente chiamai ServiceReference1:

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

Ed ecco il mio codice dietro:

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); 
} 

sto ottenendo System.ServiceModel.Security.MessageSecurityException:

La richiesta HTTP non è autorizzata con lo schema di autenticazione del client 'Anonimo'. L'intestazione di autenticazione ricevuta dal server era "NTLM".

Ho provato passando le mie credenziali tramite:

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

e anche ...

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

sto guadare attraverso la documentazione di WCF, ma ... oh boy ... c'è molto lì. Spero che sia qualcosa di facile ??

Grazie in anticipo.

+0

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

risposta

6

Impostare le associazioni di configurazione alla modalità di sicurezza = "TransportCredentialOnly" e trasporto clientCredentialType = "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

Ho provato ad usare questa configurazione, tuttavia, il nostro server è accessibile solo tramite https, quindi l'ho sostituito con 'wsHttpBinding' e' TransportWithMessageCredential'. 'Non funziona, getta' "La richiesta HTTP non è autorizzata con lo schema di autenticazione del client 'Anonimo'. L'intestazione di autenticazione ricevuta dal server era 'NTLM'." 'Errore. Hai qualche suggerimento su come farlo funzionare con 'wsHttpBinding'? –

+0

Ho funzionato in Visual Studio 2010. Ho avuto problemi con l'errore nelle nuove versioni di Visual Studio. Generano file di configurazione diversi. –

0

Stai guardando nella giusta direzione. Questa è una buona pagina con alcune informazioni di livello di esempio sui metodi di autenticazione disponibili di cui hai bisogno: http://man.ddvip.com/web/bsaspnetapp/LiB0087.html. Almeno quella pagina dovrebbe darti qualche altro indizio per continuare i tuoi sforzi.

Problemi correlati