使用协议HTTP使用TransportWithMessageCredentials使用wsHttpBinding配置端点

时间:2014-02-19 16:41:32

标签: web-services wcf wshttpbinding transport-security

我有一个带有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服务的应用程序的名称?

感谢。

0 个答案:

没有答案