Полупользовательский прокси WCF возвращает нули, несмотря на то, что верные данные возвращаются по проводам - PullRequest
0 голосов
/ 16 июня 2011

Существует ряд сервисов SOAP, которые я хочу назвать (по ряду сервисов), и, хотя конечные точки хорошо определены и задокументированы, данных WSDL нет ... поэтому я решил создать свои собственные. Для этого я создал тестовую службу WCF, которая соответствует известному интерфейсу службы, которую я хочу вызвать.

Затем я сохранил раскрытый WSDL, изменил базовый адрес, на который ссылаются WSDL, создал мой прокси (с wsdl.exe), добавил его в тестовый клиентский проект и могу успешно создать прокси и выполнять вызовы, которые вызывают SOAP служба для отправки ожидаемого ответа ... только этот ожидаемый ответ не принимается прокси и возвращается в вызывающий код.

При просмотре трафика туда-обратно ... я ясно вижу, что сервис отвечает тем, что я хочу.

Какие-либо предложения относительно того, как я мог бы устранить эту проблему и получить прокси для сбора данных?

Учитывая, что ответы фактически идентичны, я вынужден оглянуться назад на различия между тем, что отправляет мой клиент, и другим отправляет.

Известное работающее приложение отправляет свой блоб XML, начиная со следующего:

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

Хотя мой клиент сразу начинает с конверта (без тега xml и с одним пространством имен меньше):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">

Другое отличие состоит в том, что сообщение внутри тела имеет префикс пространства имен в их, а мое - нет ... хотя оба определяют это пространство имен в теге.

Ala:

<s:Body>
    <u:DoSomething xmlns:u="urn:http://some.namespace.org" />
</s:Body>

VS:

<s:Body>
    <DoSomething xmlns="urn:http://some.namespace.org" />
</s:Body>

Ответы [ 2 ]

0 голосов
/ 16 июня 2011

Наиболее вероятная проблема - версия VS, использующая пространство имен XML по умолчанию. Я работал с анализаторами мыла, которые не работают должным образом при использовании необъявленных (по умолчанию) пространств имен. Если вы знаете, что псевдоним u: работает со службой, ваш прокси-сервер также должен сгенерировать его, даже если перед каждым тегом в элементе s: Body добавляется псевдоним.

0 голосов
/ 16 июня 2011

Это не пространство имен:

s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

Он задает стиль кодирования для конверта, который, даже если он не требуется согласно спецификации SOAP , может требует конкретной реализации, с которой вы разговариваете.Достаточно ли у вас контроля над тем, что вы отправляете от клиента, чтобы поставить это на место?

Кроме этого, XML PI не требуется, и я думаю, что вы определенно на правильном пути, глядя натело XML.Это почти всегда случай некоторого несоответствия пространства имен где-либо.Вы на 100% уверены, что URI пространства имен идентичны ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...