WCF использует http://tempuri/1/number
для ссылок на uri Content-ID при обработке потоковых запросов MTOM.
Есть ли способ заставить WCF использовать разные ссылки Content-ID для xop: Include?
Предыстория проблемы:
Я создаю .NET-клиент для веб-службы jax ws java, поддерживающей MTOM, которая обрабатывает потоковые большие загрузки данных. Я вручную создал службы и контакты данных (WSDL сгенерированные контракты были неправильными и не позволяли передавать потоки).
Проблема заключается в том, что веб-служба (jax ws) не получает тело запроса, содержащее данные.
Он получает данные, которые передаются в заголовках.
Мы создали java-клиент для ws - этот работает.
Я взял и сравнил HTTP-трафик при выпуске запросов из java и wcf, и единственное различие заключается в том, как создается ссылка Content-ID при публикации многостраничных данных:
-
WCF использует ссылки
http://tempuri/1/...
Content-ID, которые выводятся в закодированном значении, напримерhref="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
-
Java-клиент использует "url-стиль" uris, например
href="cid:[email protected]"
Эти результаты в следующих xop-include (данные являются единственным элементом тела мыла) (XOP содержит спецификацию)
//WCF:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928" />
</Data>
//JAVA:
<Data>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:[email protected]"/>
</Data>
позже, в многочастных данных, контент ссылается на некодированный Content-ID:
--uuid:7e166bb7-042f-4ba3-b6ef-98fbbc21244b+id=1
Content-ID: <http://tempuri.org/1/634019957020047928>
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
Я предполагаю, что в структуре веб-службы jax может быть ошибка, и она не распознает созданные url URL + urlencoded Content-ID uri.
Есть ли способ заставить WCF использовать разные ссылки Content-ID для xop: Include?
EDIT: Я нашел XmlMtomWriter, который имеет метод GenerateUriForMimePart, это используется для генерации Content-ID.
public static string GenerateUriForMimePart(int index)
{
return string.Format(CultureInfo.InvariantCulture,
"http://tempuri.org/{0}/{1}", new object[] { index, DateTime.Now.Ticks });
}
Похоже, что генерация идентификатора не является переопределяемой.
Здесь описан подобный вопрос, предоставленный ответ не помогает: http://social.msdn.microsoft.com/Forums/en/wcf/thread/f90affbd-f431-4602-a81d-cc66c049e351