2016-04-29 15 views
14

WCF Service geçmesineAlma DefaultNetworkCredentials ben web.config'de Aşağıdaki yapılandırmaya sahip bir WebApplication oluşturduğunuz bir WCF hizmeti var

Bu servis bilgi almak için WindowsCredentials almak gerekiyor
<service name="RedwebServerManager.WebApplication.DesktopService" 
      behaviorConfiguration="ServBehave"> 
    <endpoint 
     address="" 
     binding="basicHttpBinding" 
     bindingConfiguration="basicBind" 
     contract="RedwebServerManager.WebApplication.IDesktopService"/> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicBind"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Windows"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

kimliği doğrulanmış kullanıcıya dayanan veritabanı. Bu hizmet akımı aşağıdaki imzası ile bir arabirim uygulayan bir yöntemi vardır

[ServiceContract] 
public interface IDesktopService 
{ 
    /// <summary> 
    /// Gets the clients. 
    /// </summary> 
    /// <returns>IEnumerable&lt;ClientServiceModel&gt;.</returns> 
    [OperationContract] 
    IEnumerable<ClientServiceModel> GetClients(); 
} 

Ben Windows WCF hizmeti tüketen Forms uygulaması var ve ben bu irade olarak uygulamayı kullanarak geçerli kullanıcının kimlik bilgilerini geçmesine istiyorum hepsi bizim alanımızda oturuyor. Ben manuel kimlik bilgileri kullanıcı adı kurmak ve ben çalışıyorlar ancak şifre her şey üzerinde mevcut kullanıcı kimlik bilgilerini geçirmek ama olabilir

managerService.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials 

yüzden düzgün çalışıyorsa

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IDesktopService"> 
       <security mode="TransportWithMessageCredential"> 
       <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="https://redwebservermanager.redweb.network/DesktopService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDesktopService" 
      contract="ManagerService.IDesktopService" name="BasicHttpBinding_IDesktopService" /> 
    </client> 
</system.serviceModel> 

şöyle app.config olduğunu Kullanıcı adının ve parolanın ayarlanmadığı GetClients() öğesine yapılan çağrıda hata almaya devam edin.

Bana yardım eden var mı? Bu yönteme,

'u eklemeyi denedim, ancak bu hiçbir fark yaratmadı.

+0

Kulağa aptalca geldiğini biliyorum, ancak ** 'ClientCredential' ayarlamamayı denediniz mi? Biz nakliye güvenliği ve bizim için yukarıdaki çalışmalarla NetTcpBinding kullanıyoruz. –

cevap

6

aşağıdaki yöntemlerden birini kullanarak (şifre dışındaki ve daha fazla bilgi) Adı alabilirsiniz:

//1. 
System.Security.Principal.WindowsIdentity.GetCurrent(); 
//2.  
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
    WindowsPrincipal user = (WindowsPrincipal)System.Threading.Thread.CurrentPrincipal; 
//3.  
WindowsIdentity ident = WindowsIdentity.GetCurrent(); 
    WindowsPrincipal user = new WindowsPrincipal(ident); 

Ama, kullanıcının şifresini erişebilir yolu yoktur. Kimlik bilgileri aldıktan sonra bu question

bakınız, şöyle OutgoingMessageHeaders kullanarak WCF için kullanıcı adı geçirebilirsiniz:

MessageHeader<string> header = new MessageHeader<string>(userName); 
     OperationContextScope contextScope = new OperationContextScope(InnerChannel); 
     OperationContext.Current.OutgoingMessageHeaders.Add(
     header.GetUntypedHeader("String", "System")); 

Ve WCF servis uygulamasında hoşuna okuyabilirsiniz:

OperationContext context = OperationContext.Current; 

      if (context != null) 
      { 
       try 
       { 
        _LoginName = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>("String", "System");   
       } 
       catch 
       { 
        _LoginName = string.Empty; 
       } 
      } 

Lütfen bu yardımcı olursa veya başka bir sorunuz olursa lütfen bildirin.

Teşekkür ederiz, Soma.

İlgili konular