2016-10-25 6 views
1

У меня возникли проблемы с передачей имени пользователя и пароля через регистр Castle Windsor с использованием пользовательской проверки подлинности WCF.Как пропустить Имя пользователя Учетные данные WCF через замок Windsor

У меня есть конфигурация веб-службы, как показано ниже:

<system.serviceModel> 
 
    <bindings> 
 
     <wsHttpBinding> 
 
     <binding name="wsSecureBinding"> 
 
      <security mode="TransportWithMessageCredential"> 
 
      <message clientCredentialType="UserName" /> 
 
      </security> 
 
     </binding> 
 
     </wsHttpBinding> 
 
    </bindings> 
 
    <services> 
 
     <service behaviorConfiguration="defaultProfile" name="GS1.CSSM.XMLGenerate.WebService.Implementation.XMLGenerateService"> 
 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsSecureBinding" name="wsSecureService" contract="GS1.CSSM.XMLGenerate.WebService.Interface.IXMLGenerateService">   
 
     </endpoint> 
 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
 
     </service> 
 
    </services> 
 
    <behaviors> 
 
     <serviceBehaviors> 
 
     <behavior name="defaultProfile"> 
 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
 
      <serviceCredentials> 
 
      <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="GS1.CSSM.XMLGenerate.WebService.ServiceAuthenticator, GS1.CSSM.XMLGenerate.WebService"/> 
 
      </serviceCredentials> 
 
     </behavior> 
 
     <behavior name="noAuthentication"> 
 
      <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true"/> 
 
      <serviceDebug includeExceptionDetailInFaults="false"/>   
 
     </behavior> 
 
     </serviceBehaviors> 
 
    </behaviors> 
 
    <!--<protocolMapping> 
 
     <add binding="basicHttpsBinding" scheme="https" /> 
 
    </protocolMapping>-->  
 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
 
    </system.serviceModel>

Это программа установки контейнера:

 
var container = new WindsorContainer(); 

container.AddFacility() 
       .Register(
        Component.For<IXMLGenerateService>() 
         .ImplementedBy<XMLGenerateServiceClient>() 
         .AsWcfClient(
          new DefaultClientModel 
          { 
           Endpoint = 
            WcfEndpoint.FromConfiguration("wsSecureService") 
          }.Credentials(new UserNameCredentials("zul", "password")))); 

И это клиент конфигурационный файл:

<system.serviceModel> 
 
    <bindings> 
 
     <wsHttpBinding> 
 
     <binding name="wsSecureService"> 
 
      <security mode="TransportWithMessageCredential"> 
 
      <message clientCredentialType="UserName" /> 
 
      </security> 
 
     </binding> 
 
     </wsHttpBinding> 
 
    </bindings> 
 
    <client> 
 
     <endpoint address="https://localhost:44302/Service/XMLGenerateService.svc" binding="wsHttpBinding" bindingConfiguration="wsSecureService" contract="XMLGenerateService.IXMLGenerateService" name="wsSecureService" /> 
 
    </client> 
 
    </system.serviceModel>

Я получил эту ошибку «Дополнительная информация: имя пользователя не предусмотрено. Укажите имя пользователя в ClientCredentials.», Когда я пытался вызвать метод из службы. Любые идеи?

ответ

0

я отвечу сам :)

здесь, как я решить эту проблему

container.Kernel.AddFacility<WcfFacility>() 
      .Register(Component.For<IXMLGenerateService>() 
      .AsWcfClient(new DefaultClientModel 
      { 
       Endpoint = WcfEndpoint.FromConfiguration("wsSecureService") 
      }.Credentials(new UserNameCredentials("zul", "password")))); 

     _smXMLGenerateService = container.Resolve<IXMLGenerateService>(); 

Надеюсь, это может помочь любому, у кого есть такая же проблема.

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