Мы хотим добавить значение, которое отличается для каждого запроса (например, отметку времени), которое будет добавлено к <sp:SignedParts>
в нашем wsdl под WCF.
В настоящее время 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?
После некоторого поиска в Google я обнаружил, что этого можно добиться с помощью пользовательского EndpointBehavior
, который меняет OutgoingSignatureParts
. По какой-то причине этот подход не изменил для меня wsdl.
Это правильный подход или существует более простой способ добавить метку времени к <sp:SignedParts>
узлу в wsdl?