WF4 - Как использовать внешний веб-сервис? - PullRequest
1 голос
/ 04 февраля 2011

Мне очень трудно найти ресурс или онлайн-учебник, в котором подробно рассказывается о настройке рабочего процесса WF4, который может вызывать внешний веб-сервис.Все видео и онлайн-примеры, с которыми я сталкивался, просто демонстрируют, как использовать веб-сервис, который является частью вашего решения Visual Studio, но моя ситуация влечет за собой обращение к веб-сервису на сервере не от Microsoft.

У меня есть ссылка на службу, добавленная в мой проект консоли рабочего процесса VS2010 для рассматриваемой веб-службы, и она указывает на WSDL внешней веб-службы.Пока все хорошо (я думаю).У меня есть очень простая последовательность рабочих процессов, использующая элемент управления SendAndReceiveReply для взаимодействия с внешним сервером, и я считаю, что часть Send настроена правильно.Однако ReceiveReplyForSend доставляет мне неприятности, и я не уверен, правильно ли настроены параметры Content .Я вызываю операцию с именем FileCheck , которая в настоящий момент для целей тестирования всегда возвращает значение 1, например:

<SOAP-ENV:Envelope>
    <SOAP-ENV:Body>
        <FileCheckResponse>
            <FileCheckResult>1</FileCheckResult>
        </FileCheckResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Если я пытаюсь выполнить это, яполучить ошибку «Плохо сформированное SOAP-сообщение».Что бы это ни стоило, у моего ReceiveReplyForSend есть один настроенный параметр с именем FileCheckResult , хотя я не знаю, является ли это правильным способом получения вышеуказанного значения.

Я могу поставить точку остановав любом случае, но я понятия не имею, как увидеть, как выглядит вызов SOAP в этот момент.Может ли кто-нибудь дать мне несколько советов по отладке при отправке / ответе рабочего процесса или подскажет, как получить пошаговое руководство по использованию внешнего веб-сервиса в WF4?

Обновление за февраль2, 2011: Благодаря предложению Мориса я точно вижу, что сейчас терпит неудачу.Вызов веб-службы в моем рабочем процессе не выполняется, поскольку Visual Studio создает ссылку на неправильное пространство имен в моем рабочем процессе Отправить вызов.Вот один бит XML, который неверен в сообщении SOAP - для краткости я остановлюсь на остальной части конверта SOAP:

<FileCheck xmlns="http://tempuri.org/">

Это то, что генерирует тестовый клиент WCF, который получаетуспешное возвращаемое сообщение:

<FileCheck xmlns="http://someserver.org/test/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">

Вероятно, это действительно новый вопрос, но есть ли где-то пропущенная мной настройка, которая регулирует значение xmlns ?Я попытался найти «tempuri» в моем проекте, но его нигде не было, поэтому держу пари, что я где-то пропускаю настройку по умолчанию.

Обновление от 8 февраля 2011 года: Морисапоследний совет сделал свое дело!Мне нужно было добавить правильное пространство имен в свойство ServiceContractName для моей отправки активности рабочего процесса.

1 Ответ

2 голосов
/ 07 февраля 2011

Добавление ссылки на внешний веб-сервис не намного сложнее, чем в том же решении VS2010.Только в этом случае вам необходимо указать URL-адрес, по которому VS2010 может найти веб-сервис WSDL.Поскольку механизм связи является стандартным WSDL и SOAP, при вызове другой службы не должно возникнуть проблем.

Если вы хотите отлаживать сообщения, лучшим инструментом для использования является Fiddler .Это позволит вам видеть сообщения по проводам и даже создавать запросы на лету.Если у вас есть клиент, который может работать с соответствующей службой, вы можете отслеживать его сообщения и сравнивать их с сообщениями, которые вы отправляете.При условии, что служба не использует сложные и пользовательские типы данных, тестовый клиент WCF - это хороший способ проверить, отвечает ли служба стандартным клиентским приложением .NET.

Пространство имен SOAP является частью ServiceContractName.Используйте следующий синтаксис

{http://someserver.org/test/}FileService

...