2017-11-17 36 views
6

Chúng tôi có dịch vụ WCF là cửa sổ được xác thực. Ràng buộc được cấu hình như dưới đây.Dịch vụ WCF được xác thực qua cửa sổ từ C#

<basicHttpBinding> 
    <binding textEncoding="utf-8" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" />    
     </security> 
    </binding> 
</basicHttpBinding> 

Tôi cố gắng để gọi các dịch vụ từ một ứng dụng thử nghiệm như,

try 
{ 
    BasicHttpBinding binding = new BasicHttpBinding(); 
    binding.ReceiveTimeout = new TimeSpan(10, 10, 00); 
    binding.SendTimeout = new TimeSpan(10, 10, 00); 
    binding.MaxReceivedMessageSize = Int32.MaxValue; 
    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
    binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
    EndpointAddress endpoint = new EndpointAddress("ServiceUrl"); 

    ChannelFactory<ICRMConnectorService> channelFactory = new ChannelFactory<ICRMConnectorService>(binding, endpoint); 
    channelFactory.Credentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials; 
    var service = channelFactory.CreateChannel(); 

    service.TestMethod(); 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 

Các cuộc gọi được trả lại một lỗi như, Các máy chủ từ xa trở về một lỗi: (401) trái phép.

Ai đó có thể giúp bạn không?

+0

bạn đã không đề cập đến nếu dịch vụ là địa phương ngay bây giờ, nhưng có lẽ câu hỏi đó có thể giúp: https://stackoverflow.com/questions/11408318/iis7-wcf-on-local-computer-i-get-401-unauthorized -access-is-denied-do-in-in – jonathana

+0

Không, dịch vụ không phải là địa phương. Nó được lưu trữ trên máy chủ khác nhau trong cùng một tên miền. –

+0

không nhớ, bạn có quyền truy cập để kiểm tra dịch vụ hoặc tiêu thụ nó không? Và cũng cho phép ghi nhật ký lỗi và theo dõi WCF để kiểm tra xem thông tin xác thực hợp lệ có được chuyển qua SOAP hay không. –

Trả lời

1

Bạn có thể tạo một client đối tượng từ ServiceReference (mà bạn đã thêm vào trong ứng dụng của bạn) để gọi các phương pháp và nơi bạn có thể cung cấp các cửa sổ thông tin để truy cập webservice.

Đối với triển khai thực tế Hãy thử điều này: WCF Service, Windows Authentication

1

Hãy chắc chắn rằng các thiết bị đầu cuối trong dịch vụ WCF được cấu hình như thế này <endpoint address="" binding="wsHttpBinding" contract="IService"> <identity> <dns value="localhost"/> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

Hãy chắc chắn rằng phương pháp bạn đang gọi là sử dụng mạo danh nghĩa [OperationBehavior(Impersonation = ImpersonationOption.Required)] public void TestMethod() { }

1

Tôi vừa kiểm tra bản thân mình, với cài đặt của bạn, máy chủ không nhận được người gọi được xác định. Tôi muốn nói rằng bạn muốn chuyển sang ràng buộc khác mà có thể sử dụng kênh an toàn, ví dụ BasicHttpsBinding. Tuy nhiên, yêu cầu phải có chứng chỉ SSL được thiết lập trên máy chủ (netsh http add sslcert ...) và có thể một số xác thực trong ứng dụng khách (ServicePointManager.ServerCertificateValidationCallback). Ngoài ra còn có một post về cùng một vấn đề, nhưng nó liên quan đến IIS.

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