Из-за некоторых очень специфических требований к отправке сообщений в IRS мне нужно использовать настраиваемую кодировку для создания сообщения MTOM. Проблема в том, что после этого обработка кодировщика, сообщение больше не является XML, поскольку оно должно создавать границы и заголовки для вложения.Нужно, чтобы клиент WCF выполнял поведение подписи до того, как кодеры коснулись сообщения
Это очень проблематично, потому что эта пользовательская кодировка выполняется PRIOR для поведения конечной точки, которую я настроил для подписывания исходящего сообщения с нашим сертификатом X509. Конфигурация здесь:
<behaviors>
<endpointBehaviors>
<behavior name="SigningBehavior">
<clientCredentials>
<clientCertificate findValue="serial goes here" x509FindType="FindBySerialNumber"
storeLocation="CurrentUser" storeName="My" />
<serviceCertificate>
<defaultCertificate findValue="serial goes here" x509FindType="FindBySerialNumber"
storeLocation="CurrentUser" storeName="My" />
<authentication certificateValidationMode="PeerTrust"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
Есть ли способ, чтобы иметь клиента знак WCF и добавить заголовок WS-безопасности, прежде чем обычай кодирования выполняется?
О, это нелегко. Я настроил gzipMessageEncoding и сделал ссылку на реализацию Microsoft Enterprise SOAP с помощью вложений как innerMessageEncoding вместо WCF, встроенного в кодировку MTOM. Таким образом, я заранее знаю, какие значения id будут использоваться для вложения и границы, что позволит мне правильно настроить заголовки HTTP (в частности, заголовок Content-Type). Я узнал намного позже, чем желательно, чтобы вы не могли изменять или добавлять заголовки HTTP в любое время после того, как ваше сообщение вошло в конвейер WCF. Поэтому они должны быть установлены заранее. Следующее сообщение Я подробно расскажу о MTOM далее – Bon
Теперь, внутри метода записи SWA Write, вот где я делаю свое подписание и делаю другие манипуляции. Конечно, подписание происходит очень долго. Необходимо заменить содержимое встроенного вложения BulkExchangeFile содержимым xop: Include с атрибутом href, соответствующим идентификатору приложения MTOM. Затем, после этого, и я подписываю x509, он возвращается к внешней кодировке gzip, а затем вниз по кабелю к IRS. – Bon
Теперь я застрял в недействительном WS-заголовке после хорошего успеха, используя класс SignedXml для загрузки всего сообщения SOAP, ссылаясь на 3 идентификатора заголовка и получаю из него действительный элемент подписи ALMOST. Но он не использует SecurityTokenReference, как требует IRS. Вместо этого он использует аналогичные действительные (в соответствии с W3C) X509Data и X509Certificate элементы внутри элемента KeyInfo. – Bon