2011-09-01 35 views
7

Tôi là một noob để gọi các dịch vụ web WCF, vì vậy tôi hy vọng đây là một câu hỏi dễ. Khi gọi một dịch vụ web với .NET 4 winform client, làm cách nào để thay đổi lược đồ ủy quyền từ Anonymous thành NTLM?cách gọi dịch vụ web bằng cách sử dụng lược đồ ủy quyền NTLM?

Ngay bây giờ tôi nhận được ngoại lệ: Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Ẩn danh'. Tiêu đề xác thực nhận được từ máy chủ là 'NTLM'.

Mục tiêu của tôi là xây dựng một công cụ nhỏ để giúp tôi theo dõi kho dữ liệu và khối lập phương của TFS 2010. TFS cung cấp dịch vụ web WarehouseControlWebService. Tôi có thể gọi dịch vụ qua chế độ Kiểm tra trong trình duyệt khi đăng nhập vào máy chủ. Tuy nhiên, tôi đang cố gắng gọi cùng một dịch vụ web từ xa, từ máy tính để bàn của tôi. Tài khoản người dùng của tôi nằm trong nhóm Quản trị viên cục bộ trên máy chủ.

Tôi đã tạo một .NET 4 WinForm bằng Nút chính 1 và TextArea1. sau đó tôi đã thêm một tài liệu tham khảo phục vụ cho các dịch vụ web và sáng tạo gọi nó ServiceReference1:

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

Và đây là mã của tôi đằng sau:

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

Tôi nhận được System.ServiceModel.Security.MessageSecurityException:

Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Ẩn danh'. Tiêu đề xác thực nhận được từ máy chủ là 'NTLM'.

Tôi đã thử đi qua thông tin của tôi qua:

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

và cũng ...

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

Tôi lội qua các tài liệu WCF nhưng ... oh boy ... có rất nhiều ở đó. Tôi hy vọng đây là một cái gì đó dễ dàng ??

Xin cảm ơn trước.

+0

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

Trả lời

6

Đặt bindings cấu hình của bạn để chế độ bảo mật = "TransportCredentialOnly" và clientCredentialType vận chuyển = "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

Tôi đã cố gắng sử dụng cấu hình này, tuy nhiên, máy chủ của chúng tôi chỉ có thể truy cập thông qua https, vì vậy tôi đã thay thế nó bằng 'wsHttpBinding' và' TransportWithMessageCredential'. Nó không hoạt động, ném '" Yêu cầu HTTP là trái phép với lược đồ xác thực ứng dụng khách 'Ẩn danh'. Tiêu đề xác thực nhận được từ máy chủ là 'NTLM'. "' Lỗi. Bạn có bất cứ đề nghị làm thế nào để làm cho nó hoạt động với 'wsHttpBinding'? –

+0

Tôi đã làm việc này trong Visual Studio 2010. Có những thứ khác nhau với lỗi trong các phiên bản mới của Visual Studio. Chúng tạo ra các tệp cấu hình khác nhau. –

0

Bạn đang tìm đúng hướng. Đây là một trang tốt với một số thông tin cấp mẫu về các phương thức xác thực khả dụng mà bạn cần: http://man.ddvip.com/web/bsaspnetapp/LiB0087.html. Ít nhất trang đó sẽ cho bạn thêm một số manh mối để tiếp tục nỗ lực của bạn.

Các vấn đề liên quan