我有一个带有2个端点的旧WCF服务。一个端点使用basicHttpBinding配置,它工作正常。我想配置另一个端点使用wsHttpBinding并将安全模式设置为TransportWithMessageCredentials,以便我可以使用以下方法读取用户名:
string UserName = ServiceSecurityContext.Current.PrimaryIdentity.Name;
协议必须是HTTP,而不是使用安全HTTPS。 我找到了类似于这个问题的答案,并试图实现它。这是web.config文件:
<bindings>
<basicHttpBinding>
<binding name="myBindingConfiguration1" closeTimeout="00:01:00">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
<wsHttpBinding>
<binding name="SecureServiceEndpoint" closeTimeout="00:01:00">
<security mode="None">
</security>
</binding>
</wsHttpBinding>
<customBinding>
<binding name="HttpWithAuthentication">
<security authenticationMode="UserNameOverTransport" allowInsecureTransport="true" />
<context />
<!-- needed for durable worklfows -->
<textMessageEncoding messageVersion="Soap12Addressing10" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Service.Service">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<endpoint address="insecure" binding="basicHttpBinding" bindingConfiguration="myBindingConfiguration1"
name="InsecureService" contract="Service.IService" />
<endpoint address="secure" binding="customBinding" bindingConfiguration="HttpWithAuthentication"
name="SecureService" contract="Service.ISecureService" />
</service>
</services>
当我尝试更新服务引用时,出现错误: messageVersion =“Soap12Addressing10”不是类型的有效实例。
根据MS文档,这是一种有效的类型。 该属性应该是什么消息版本?
我尝试删除此属性,并且可以更新服务引用,但在访问安全端点时,客户端应用程序会抛出异常: “提供的URI方案'http'无效;预期'https'。\ r \ nParameter name:via”。
我在文档中已经读到不推荐这种方法,但这是一个遗留应用程序,我想看看它是否可行。如果你能告诉我为什么不推荐这个,我一定会向我的上司解释。
更新
我得到了填充值的配置,
ServiceSecurityContext.Current.PrimaryIdentity.Name
我在web.config文件中创建了下面的绑定:
<wsHttpBinding>
<binding name="PaymentSecureServiceEndpoint" closeTimeout="00:01:00">
<security mode="Message">
</security>
</binding>
</wsHttpBinding>
但是,我希望该值是客户端应用程序的NAME,它是我的用户名。同样,我读过的文档表明这个值将是访问Web服务的客户端应用程序的名称。我尝试设置
的值 webSeviceName.ClientCredentials.UserName.UserName = "Test Client"
到应用程序名称的值但是也没有用。
如何获取正在访问Web服务的应用程序的名称?
感谢。