2011-09-01 14 views
7

WCF web servislerini aramak için noob var, bu yüzden bu kolay bir soru umuyoruz. .NET 4 winform istemcisi ile bir web servisi çağrıldığında, yetkilendirme şemasını Anonimden NTLM'ye nasıl değiştirebilirim?NTLM yetkilendirme şemasını kullanarak web servisini nasıl arayabilirim?

Şu anda istisna yapıyorum: HTTP isteği, istemci kimlik doğrulama şeması 'Anonim' ile yetkisizdir. Sunucudan alınan kimlik doğrulama başlığı 'NTLM' idi.

Amacım, TFS 2010'un veri ambarı ve küpünü izlememe yardımcı olacak küçük bir araç oluşturmak. TFS bir WarehouseControlWebService web hizmeti sağlar. Sunucuda oturum açıldığında tarayıcıda Test modu aracılığıyla servisi çağırabilirim. Ancak, aynı web servisini masaüstümden uzaktan çağırmaya çalışıyorum. Kullanıcı hesabım sunucudaki yerel Yöneticiler grubunda.

Kanonik Button1 ve TextArea1 ile bir .NET 4 WinForm oluşturdum. Sonra bir web hizmeti için bir hizmet referansı eklendi ve yaratıcı ServiceReference1 denir:

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

Ve işte benim kod arkasında:

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

Ben System.ServiceModel.Security.MessageSecurityException alıyorum:

HTTP isteği, istemci kimlik doğrulama şeması 'Anonim' ile yetkisizdir. Sunucudan alınan kimlik doğrulama başlığı 'NTLM' idi.

Ben aracılığıyla benim kimlik bilgilerini geçirmeden denedim: WCF belgelerine aracılığıyla da

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

ve ...

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

ben suda yürümek ediyorum ama ... oh erkek var ... orada çok var. Umarım bu kolay bir şeydir?

Şimdiden teşekkürler.

+0

bakınız http://meta.stackexchange.com/questions/2950/should-hi-thanks -taglines-and-salutations-remove-from-from-posts- –

cevap

6

güvenlik modunda = "TransportCredentialOnly" ve nakil ClientCredentialType için yapılandırma bağlamaları Set = "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

Bu yapılandırmayı kullanmayı denedim, ancak sunucumuza sadece https üzerinden erişilebilir, bu yüzden 'wsHttpBinding' ve' TransportWithMessageCredential' ile değiştirdim. Bu işe yaramaz, "HTTP isteği, istemci kimlik doğrulama şeması 'Anonim' ile yetkisizdir. Sunucudan alınan kimlik doğrulama başlığı 'NTLM' idi." Hatası. "WsHttpBinding" ile nasıl çalışılacağı konusunda herhangi bir öneriniz var mı? –

+0

Visual Studio 2010'da çalışıyorum. Visual Studio'nun yeni sürümlerinde hatayla farklı şeyler var. Farklı yapılandırma dosyaları oluştururlar. –

0

Doğru yöne bakıyorsunuz. Bu, gereksinim duyduğunuz mevcut kimlik doğrulama yöntemleri hakkında bazı örnek düzey bilgileri içeren iyi bir sayfadır: http://man.ddvip.com/web/bsaspnetapp/LiB0087.html. En azından bu sayfa, çabalarınızı sürdürmek için size bazı ipuçları vermelidir.

İlgili konular