2010-12-01 1 views
0

Я пытаюсь создать приложение WP7, которое должно взаимодействовать с сервисом WCF.
Я хочу передать имя пользователя/пароль и увидеть его в службе WCF.WCF - не удается получить Identity.UserName внутри службы

 Service1Client proxy = new Service1Client(); 
     proxy.ClientCredentials.UserName.UserName= "[email protected]"; 
     proxy.ClientCredentials.UserName.Password = "abc"; 

код мы попытались в службе, чтобы получить проверенное имя (но мы получили окно идентичности вместо - MYPC \ MyLogin)

HttpContext.Current.User.Identity.Name 

Вот конфигурация клиента

<configuration> 
<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647"> 
       <!--<security mode="None" />--> 
       <security mode="TransportCredentialOnly"> 
       <!--<transport clientCredentialType="Basic" />-->     
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:45148/Service1.svc" binding="basicHttpBinding" 
      bindingConfiguration="BasicHttpBinding_IService1" contract="ServiceReference1.IService1" 
      name="BasicHttpBinding_IService1" /> 
    </client> 
</system.serviceModel> 

И вот конфигурация сервера

 <?xml version="1.0"?> 
     <configuration> 
      <system.web> 
      <compilation debug="true" targetFramework="4.0" /> 
      </system.web> 
      <system.serviceModel> 
      <behaviors> 
       <serviceBehaviors > 
       <behavior> 
        <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
        <serviceMetadata httpGetEnabled="true"/> 
        <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
        <serviceCredentials> 
        <userNameAuthentication userNamePasswordValidationMode="Custom" 
        customUserNamePasswordValidatorType="WP7Service.WpfCustomValidator, WP7Service" /> 
        </serviceCredentials> 
       </behavior> 
       </serviceBehaviors> 
      </behaviors> 
      <bindings> 
       <basicHttpBinding> 
       <binding name="BasicHttpBinding_IService1"> 
        <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="None" /> 
        </security> 
       </binding> 
       </basicHttpBinding> 
      </bindings> 
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 
      </system.serviceModel> 
      <system.webServer> 
      <modules runAllManagedModulesForAllRequests="true"/> 
      </system.webServer> 
     </configuration> 

Также у меня есть Cutom имя пользователя валидатор, но это никогда не называют

public class WpfCustomValidator : 
     System.IdentityModel.Selectors.UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     if (userName == null || password == null) 
     { 
      throw new ArgumentNullException(); 
     } 
     var rf = WindsorAccessor.InitializeRepositoryFactory(userName); 

     if (!ValidateLogOn(rf, userName, password)) 
     { 
      throw new FaultException("Incorrect Username or Password"); 
     } 
    } 
} 

Я хочу, чтобы ответ, чтобы показать, как настроить клиент и сервис, чтобы иметь возможность видеть ClientCredentials.UserName.UserName в обслуживании через HttpContext.Current.User.Identity.Name или с помощью текущего потока (или любым другим способом).

ответ

1

Dominick Baier shows you how do to do this в своем блоге.

Ваш пользовательский код валидатора не вызывается, потому что служба настроена для clientCredentialType = «Нет» - то есть нет аутентификации.

+0

Еще не проверены, но, похоже, это то, что нам нужно, tnx. – 2010-12-13 13:36:08

 Смежные вопросы

  • Нет связанных вопросов^_^