将时间戳记添加到WCF中的wsdl SignedParts节点

时间:2018-06-28 09:02:20

标签: c# wcf wsdl

我们想为每个要添加到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>节点上添加时间戳?

0 个答案:

没有答案