Мне дали WSDL для доступа к веб-службе SOAP 1.1. WSDL только один раз ссылается на двоичный токен безопасности. Для ожидаемого запроса требуется второй двоичный токен безопасности перед тегом подписи, но после тега ключа шифрования. Мне нужно как-то сказать WCF добавить этот дополнительный тег токена безопасности, которого нет в схеме WSDL. Странная вещь, которую я заметил в связи с моим стремлением решить эту проблему, заключается в том, что SOAPUI добавляет токен, хотя его нет в схеме WSDL. Следующая информация имеет отношение к пониманию проблемы:
Это файл конфигурации:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<customBinding>
<binding name="customWebRealmBinding">
<security messageProtectionOrder="SignBeforeEncrypt" defaultAlgorithmSuite="TripleDesRsa15"
authenticationMode="MutualCertificateDuplex" securityHeaderLayout="LaxTimestampLast"
includeTimestamp="true"
allowSerializedSigningTokenOnReply="true" requireDerivedKeys="false" />
<textMessageEncoding messageVersion="Soap11WSAddressingAugust2004"></textMessageEncoding>
<httpsTransport authenticationScheme="Basic" realm="weblogic" maxReceivedMessageSize="2147483647"
requireClientCertificate="true" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="https://XXX/XXX/XXX/XXXService?WSDL"
binding="customBinding" bindingConfiguration="customWebRealmBinding"
contract="XXXService.XXXServiceType" name="XXXerviceTypeSoapPort" behaviorConfiguration="XXXBehavior">
<identity>
<dns value="XXXXXXX"/>
<certificateReference findValue="XXXXX, XXXXXX, XXX, XXX XXX. XXXX, XXXX"
storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectDistinguishedName"/>
</identity>
</endpoint>
</client>
<behaviors>
<endpointBehaviors>
<behavior name="XXXBehavior">
<callbackDebug includeExceptionDetailInFaults="true" />
<clientCredentials>
<clientCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindBySubjectDistinguishedName"
findValue="XXXXXXXXXX, XXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX" />
<serviceCertificate>
<defaultCertificate storeLocation="LocalMachine" storeName="My"
x509FindType="FindBySubjectDistinguishedName"
findValue="XXXX, XXXXX, XXXX, XXXX, XXXX. XXXXX, XXXXX" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="NLog.LogReceiverService.LogReceiverOneWayForwardingService">
<endpoint address="https://XXXXService?WSDL"
name="XXXServiceEndpoint" binding="customBinding" contract="XXXService.XXXServiceType"/>
<host>
<baseAddresses>
<add baseAddress="https://XXX/XXX/XXXService?WSDL"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" maxdatasize="1048576" tracemode="protocolonly">
<listeners>
<add name="MyTraceFile"/>
<add name="MyConsole"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="System.Net.trace.log" />
<add name="MyConsole" type="System.Diagnostics.ConsoleTraceListener" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
</switches>
</system.diagnostics>
</configuration>
Это сообщение WCF, которое создается, когда я делаю это:
Я хочу, чтобы он выглядел так же, как и выше, но мне нужен еще один двоичный токен безопасности между конечным тегом EncryptedKey и перед началом тега подписи. Программно я на самом деле просто устанавливаю имя пользователя, пароль и значения сертификата и вызываю службу.
Любая помощь будет отличной! Спасибо!