Использование WCF http://tempuri/1/number
для ссылок uri довольного идентификатора, когда обработка передала запросы MTOM потоком.
Есть ли какой-либо путь, как вынудить WCF использовать другой довольный идентификатор ссылки для xop:Include?
Фон проблемы:
Я создаю клиент.NET для включенного jax MTOM ws веб-сервис Java, который обрабатывает переданные потоком большие загрузки данных. Я имею ручной работы сервис, и контакты данных (WSDL генерировал контракты, не были корректны и не позволил передавать потоком).
Проблема состоит в том, что веб-сервис (jax ws) не получает тело запроса, содержащее данные.
Это получает данные, которые переданы в заголовках.
Мы создали клиент Java для ws - эти работы.
Я получил и сравнил Трафик HTTP при издании запросов от Java и wcf, и единственная разница находится в том, как ссылка довольного идентификатора сгенерирована при регистрации многослойных данных:
Использование WCF http://tempuri/1/...
Ссылки довольного идентификатора, которые уступают в закодированном значении, как href="cid:http%3A%2F%2Ftempuri.org%2F1%2F634019957020047928"
Клиент Java использует "почтовый стиль" uris, как href="cid:3f3ec388-8cd9-47aa-a603-fb1bc17935b8@example.jaxws.sun.com"
Они уступают в следующем, xop-включает (Данные являются единственным элементом в теле мыла) (XOP включает спецификацию),
//WCF:
//JAVA:
позже, в многослойных данных, содержание упомянуто незакодированным довольным идентификатором:
--uuid:7e166bb7-042f-4ba3-b6ef-98fbbc21244b+id=1
Content-ID:
Content-Transfer-Encoding: binary
Content-Type: application/octet-stream
Я предполагаю, что может быть ошибка в jax платформе веб-сервиса, и она не распознает WCF-generated+urlencoded ссылки uri довольного идентификатора.
Есть ли какой-либо путь, как вынудить WCF использовать другой довольный идентификатор ссылки для 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
Отвечаю себе после долгого исследования: невозможно без повторной реализации всего XmlMtomWriter и других связанных уровней и проблем в WCF - почти все, что задействовано в реализации mtom, является внутренним.