2009-02-18 32 views
6

Tôi đã viết một dịch vụ duplex WCF và ứng dụng khách. Mọi thứ hoạt động tốt cho đến khi tôi cố gọi .Demand() trong quá trình cài đặt ứng dụng khách. Dường như dịch vụ gọi phương thức gọi lại ẩn danh. Tôi nghĩ rằng tôi đang thiếu cách cấu hình đúng dịch vụ.Gọi lại hai mặt luôn ẩn danh

Mã được sử dụng để tạo ServiceHost;

ServiceHost duplex = new ServiceHost(new ServerWCallbackImpl());   
NetTcpBinding secureBinding = new NetTcpBinding(SecurityMode.Message); 
secureBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; 
duplex.AddServiceEndpoint(typeof(IServerWithCallback), 
    secureBinding, 
    "net.tcp://localhost:9080/DataService"); 
Console.WriteLine(Thread.CurrentPrincipal.Identity.Name); //<-- this correctly shows the current principal 
duplex.Open(); 
if (duplex.State == CommunicationState.Opened) 
    ((ServerWCallbackImpl)duplex.SingletonInstance).Send("Hello World!"); 

Mã được sử dụng để tạo khách hàng;

CallbackImpl callbackInstance = new CallbackImpl(); 
NetTcpBinding secureBinding = new NetTcpBinding(SecurityMode.Message); 
secureBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; 
DuplexChannelFactory<IServerWithCallback> cf = new DuplexChannelFactory<IServerWithCallback>(
    callbackInstance, 
    secureBinding, 
    new EndpointAddress(requestingEndpointAddress));   
cf.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 
cf.Credentials.Windows.ClientCredential = (NetworkCredential)CredentialCache.DefaultCredentials; 
IServerWithCallback srv = cf.CreateChannel(new InstanceContext(callbackInstance)); 
srv.InitiateConversation(); 

thực hiện Chủ đầu tư:

public void MethodOnClient(string message) 
{ 
    Console.WriteLine(Thread.CurrentPrincipal.Identity.Name); // <-- anonymous 
    PrincipalPermission p = new PrincipalPermission(@"DOMAIN\User", null); 
    p.Demand(); // <-- fails 
} 

Làm thế nào tôi có thể cấu hình để các ServiceHost gọi đúng Callback với các thông tin Windows?

Trả lời

0

Cài đặt TokenImpersonationLevel to Delegation thay vì Mạo danh? Như thế này:

cf.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 

Xem this MSDN article.

+0

Máy đào mộ? :) Câu hỏi đã được hỏi ngày 18 tháng 2 năm 2009 và yêu cầu người dùng đã bị xóa vì không hoạt động, tôi đoán thời gian dài trước đây. – abatishchev

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