WCF использует http://tempuri/1/number
для ссылок URI Content-ID при обработке потоковых запросов MTOM.
Есть ли способ заставить WCF использовать другие ссылки Content-ID для xop: Include?
Предыстория проблемы:
Я создаю .NET-клиент для MTOM-совместимого веб-сервиса jax ws java, который обрабатывает потоковые загрузки больших объемов данных. Я вручную создал контакты службы и данных (сгенерированные 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-клиент использует uris "в стиле электронной почты", например href="cid:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"
Этот выход в следующем 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:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"/>
</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, и она не распознает сгенерированные WCF + кодированные ссылки URI Content-ID.
Есть ли способ заставить WCF использовать другие ссылки Content-ID для xop: Include?
РЕДАКТИРОВАТЬ: Я нашел XmlMtomWriter, который имеет метод GenerateUriForMimePart, он используется для генерации идентификаторов содержимого.
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