2016-10-25 2 views
1

Ich habe ein Problem, Benutzername und Passwort durch Schloss Windsor Register mit benutzerdefinierten WCF-Authentifizierung übergeben.So übergeben Sie Benutzername Credential WCF durch Castle Windsor

Ich habe eine Web-Service-Konfiguration wie folgt:

<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>

Dies ist der Container Setup:

 
var container = new WindsorContainer(); 

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

Und das ist Client-Konfigurationsdatei:

<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>

Ich habe diese Fehler „Zusätzliche Informationen: Der Benutzername ist nicht vorgesehen. Geben Sie Benutzernamen in ClientCredentials.“Sobald ich Methode aus dem Dienst zu rufen versucht. Irgendwelche Ideen?

Antwort

0

Ich werde sie beantworten von mir :)

hier ist es, wie ich das Problem behoben

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

     _smXMLGenerateService = container.Resolve<IXMLGenerateService>(); 

Hoffentlich kann es jedem mit dem gleichen Problem helfen.

Verwandte Themen