我们有一个使用wsHttpBinding的WCF服务。我生成的样本请求包括一个时间戳,该时间戳由WCF针对每个请求进行验证:
<u:Timestamp u:Id="_0">
<u:Created>2013-11-02T16:58:24.575Z</u:Created>
<u:Expires>2013-11-02T17:03:24.575Z</u:Expires>
</u:Timestamp>
我们最近对服务进行了笔测试,测试人员注意到可以简单地省略timestamp元素,并且在没有它的情况下接受请求。
我正在审核该报告,我想为此添加一个解释。不幸的是,我有一个很好的搜索,我找不到任何解释它的资源,甚至没有提到它。
所以我的问题是:
这是服务绑定配置:
<wsHttpBinding>
<binding name="usernameHttps" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
这是客户端绑定配置:
<wsHttpBinding>
<binding name="WSHttpBinding_IService" maxReceivedMessageSize="2147483647">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName" establishSecurityContext="false" />
</security>
</binding>
</wsHttpBinding>
答案 0 :(得分:0)
我得到an answer to this from the MS forums:
- 为什么这是可选的?
醇>时间戳是选项,因为它是必须采取行动的reciver 它来自MSDN http://msdn.microsoft.com/en-us/library/ms977327.aspx
&#34;通过了解创建和到期时间,接收者可以决定 如果数据足够新用于自己使用或数据已经变为如此 陈旧的消息应该被丢弃。 &#34;
- 如果我问过,是否可以强制设置时间戳?
醇>是,如上所述,您的服务逻辑需要这样做 最简单的方法是在WCF处理管道中添加拦截器 将检查此标头,如果没有找到它会抛出错误 http://msdn.microsoft.com/en-us/magazine/cc163302.aspx