2011-09-01 14 views
7

Jestem noobem do wywoływania usług internetowych WCF, więc mam nadzieję, że jest to łatwe pytanie. Podczas wywoływania usługi internetowej z klientem WinForm .NET 4, jak zmienić schemat autoryzacji z Anonimowego na NTLM?jak połączyć się z usługą sieciową za pomocą schematu autoryzacji NTLM?

Teraz otrzymuję wyjątek: Żądanie HTTP jest nieautoryzowane przy użyciu schematu uwierzytelniania klienta "Anonimowy". Nagłówek autentykacji odebrany z serwera to "NTLM".

Moim celem jest zbudowanie małego narzędzia, które pomoże mi monitorować hurtownię danych i kostkę TFS 2010. TFS zapewnia usługę WWW WarehouseControlWebService. Mogę wywołać usługę za pomocą trybu testowego w przeglądarce po zalogowaniu się na serwerze. Jednak próbuję wywołać zdalnie tę samą usługę sieciową z mojego pulpitu. Moje konto użytkownika znajduje się w lokalnej grupie Administratorzy na serwerze.

Utworzono WinForm .NET 4 z kanonicznym Button1 i TextArea1. I dodaje odniesienie serwis do usługi internetowej i twórczo nazwał go ServiceReference1:

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

A oto mój kod za:

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

Dostaję System.ServiceModel.Security.MessageSecurityException:

Żądanie HTTP jest nieautoryzowane przy użyciu schematu uwierzytelniania klienta "Anonimowy". Nagłówek autentykacji odebrany z serwera to "NTLM".

Próbowałem przechodzącą moje poświadczenia poprzez:

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

i również ...

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

ja brodząc dokumentacji WCF ale ... oh boy ... nie ma dużo tam. Mam nadzieję, że to jest coś łatwego?

Z góry dziękuję.

+0

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

Odpowiedz

6

Określ powiązania config do trybu zabezpieczeń = "TransportCredentialOnly" i clientCredentialType transportowej = "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

Próbowałem użyć tej konfiguracji, jednak nasz serwer jest dostępny tylko przez https, więc zamieniłem go na 'wsHttpBinding' i' TransportWithMessageCredential'. To nie działa, zgłasza '" Żądanie HTTP jest nieautoryzowane za pomocą schematu uwierzytelniania klienta "Anonimowy" Nagłówek uwierzytelnienia odebrany z serwera był "NTLM". "" Błąd. Czy masz jakieś sugestie, jak sprawić by działało z 'wsHttpBinding'? –

+0

Mam to działa w Visual Studio 2010. Mam różne rzeczy z błędem w nowych wersjach Visual Studio. Generują różne pliki konfiguracyjne. –

Powiązane problemy