我们想为每个要添加到WCF下wsdl中<sp:SignedParts>
的请求的值添加一个不同的值。
当前我们服务的wsdl包含:
<wsp:ExactlyOne>
<wsp:All>
<sp:SignedParts>
<sp:Body/>
<sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing"/>
<sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing"/>
</sp:SignedParts>
<sp:EncryptedParts>
<sp:Body/>
</sp:EncryptedParts>
</wsp:All>
</wsp:ExactlyOne>
以及用于服务和绑定的配置:
<service behaviorConfiguration="ServiceBehavior" name="IService">
<host>
<baseAddresses>
<add baseAddress="https://localhost/Service" />
</baseAddresses>
</host>
<endpoint binding="customBinding" bindingConfiguration="CertificateBinding" contract="IService" />
<endpoint binding="mexHttpsBinding" contract="IMetadataExchange" address="mex" />
</service>
[...]
<customBinding>
<binding name="CertificateBinding">
<sslStreamSecurity requireClientCertificate="true" sslProtocols="Tls12" />
<security authenticationMode="MutualCertificate"
messageSecurityVersion="WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12"
requireSignatureConfirmation="true"
enableUnsecuredResponse="false"
includeTimestamp="true" />
<httpsTransport authenticationScheme="Anonymous" maxReceivedMessageSize="1000000"/>
</binding>
</customBinding>
我们知道,对于复杂的请求,<sp:Body/>
总是会有所不同,但是像调用方法GetNextScript那样的无参数主体又如何呢?
经过一番谷歌搜索,我发现可以通过更改EndpointBehavior
的自定义OutgoingSignatureParts
来实现。由于某种原因,这种方法对我来说并没有改变wsdl。
这是正确的方法,还是有一种简单的方法可以在wsdl中的<sp:SignedParts>
节点上添加时间戳?