pollingDuplexHttpBinding与安全模式TransportWithMessageCredential。来自服务器的响应不会来到客户端

时间:2012-01-24 19:28:05

标签: wcf silverlight wcf-security

我们在SSL上使用pollingDuplexHttpBinding,安全模式为 TransportWithMessageCredential 。 服务从客户端接收消息,但客户端没有得到响应。

如果我们将安全模式从 TransportWithMessageCredential 更改为传输,则一切正常。

工作配置

要显示的评论不起作用。

服务配置

<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
      <!--
      <serviceCredentials>
        <userNameAuthentication userNamePasswordValidationMode="Custom" 
                                customUserNamePasswordValidatorType="myType" />
      </serviceCredentials>
      -->
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>
  <pollingDuplexHttpBinding>
    <binding name="multipleMessagesPerPollPollingDuplexHttpBinding"
              duplexMode="SingleMessagePerPoll">
      <!--
      <security mode="TransportWithMessageCredential" />
      -->
      <security mode="Transport" />
    </binding>
  </pollingDuplexHttpBinding>
</bindings>

<services>
  <service name="Gam.Service.GamSrv">
    <endpoint
        address=""
        binding="pollingDuplexHttpBinding"
        bindingConfiguration="multipleMessagesPerPollPollingDuplexHttpBinding"
        contract="Gam.Service.Abstract.IUserSrv" />
    <endpoint
        address="mex"
        binding="mexHttpBinding"
        contract="IMetadataExchange" />
  </service>
</services>

SilverLight 4客户端配置

<bindings>
  <customBinding>
    <binding name="pd">
      <!--
      <security authenticationMode="UserNameOverTransport" />
      -->
      <pollingDuplex duplexMode="SingleMessagePerPoll" />
      <binaryMessageEncoding />
      <httpsTransport transferMode="Buffered" />
    </binding>
  </customBinding>
</bindings>
<client>
  <endpoint address="/GamSrv.svc"
    binding="customBinding"
    bindingConfiguration="pd"
    contract="GamSrvReference.IUserSrv"
    name="MyDuplexContract" />
</client>

1 个答案:

答案 0 :(得分:0)

解决方案 - 在客户端安全配置中添加includeTimestamp =“false”

<security authenticationMode="UserNameOverTransport" includeTimestamp="false" />