Я разрабатываю веб-сервис для внешнего WSDL. Доступ осуществляется с помощью HTTP / S (сертификаты сервера и клиента), и запрос и ответ подписываются соответствующим сертификатом. Я импортировал WSDL в VS2010 со ссылкой на службу и добавил подпись к MessageContracts, настроил файл конфигурации для обеспечения безопасности и https и настроил SSL для порта.
Я близок к тому, чтобы заставить его работать, но мне нужно включить ручную адресацию, чтобы вставить элемент wsa:To
в ответ, но я не могу понять, как заставить это работать ...
Любая помощь приветствуется.
Вот мой текущий раздел конфигурации:
<bindings>
<customBinding>
<binding name="AfleverServiceSoapBinding_V1_1">
<security defaultAlgorithmSuite="TripleDesRsa15"
authenticationMode="MutualCertificateDuplex"
requireDerivedKeys="false"
securityHeaderLayout="Lax"
includeTimestamp="true"
keyEntropyMode="CombinedEntropy"
messageProtectionOrder="EncryptBeforeSign"
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
requireSignatureConfirmation="false"
allowSerializedSigningTokenOnReply="true"
enableUnsecuredResponse="False">
<localClientSettings cacheCookies="true"
detectReplays="true"
replayCacheSize="900000"
maxClockSkew="00:05:00"
maxCookieCachingTime="10:00:00"
replayWindow="00:05:00"
sessionKeyRenewalInterval="10:00:00"
sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true"
timestampValidityDuration="00:05:00"
cookieRenewalThresholdPercentage="60"/>
<localServiceSettings detectReplays="true"
issuedCookieLifetime="10:00:00"
maxStatefulNegotiations="128"
replayCacheSize="900000"
maxClockSkew="00:05:00"
negotiationTimeout="00:01:00"
replayWindow="00:05:00"
inactivityTimeout="00:02:00"
sessionKeyRenewalInterval="15:00:00"
sessionKeyRolloverInterval="00:05:00"
reconnectTransportOnFailure="true"
maxPendingSessions="128"
maxCachedCookies="1000"
timestampValidityDuration="00:05:00"/>
<secureConversationBootstrap/>
</security>
<mtomMessageEncoding maxReadPoolSize="64"
maxWritePoolSize="16"
messageVersion="Soap11WSAddressing10"
maxBufferSize="65536"
writeEncoding="utf-8">
<readerQuotas maxDepth="32"
maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
</mtomMessageEncoding>
<httpsTransport manualAddressing="false"
maxBufferPoolSize="524288"
maxReceivedMessageSize="65536"
allowCookies="false"
authenticationScheme="Anonymous"
bypassProxyOnLocal="false"
decompressionEnabled="true"
hostNameComparisonMode="StrongWildcard"
keepAliveEnabled="true"
maxBufferSize="65536"
proxyAuthenticationScheme="Anonymous"
realm=""
transferMode="Buffered"
unsafeConnectionNtlmAuthentication="false"
useDefaultWebProxy="true"
requireClientCertificate="true" />
</binding>
</customBinding>
</bindings>
Большая часть этого была сгенерирована автоматически.
Я знаю, что для атрибута manualAddressing
в httpsTransport
нужно установить значение true, но затем я получаю исключение, потому что эта настройка защищена на уровне сообщений.
Кто-нибудь знает, как переключиться на безопасность на транспортном уровне, сохранив при этом остальное? Поскольку это customBinding
, атрибут mode
в элементе security
недоступен.
Thnx много, походка.
Кстати, я знаю, как установить wsa:To
в коде, но он теряется в ответе на кодирование, если я не могу перейти к ручной адресации.