如何通过温莎城堡通过用户名凭据WCF

本文关键字:用户 WCF 何通过 城堡 | 更新日期: 2023-09-27 18:14:57

我有一个问题,通过使用自定义WCF认证通过温莎城堡注册用户名和密码。

我有一个如下的Web服务配置:

<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中指定用户名。什么好主意吗?

如何通过温莎城堡通过用户名凭据WCF

我自己回答:)

这是我如何解决这个问题

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

希望它能帮助任何有同样问题的人。