Вызов службы WCF - без добавления ссылки - PullRequest
1 голос
/ 17 марта 2009

Я хочу вызвать службу wcf для тестирования на уровне http. Я не хочу добавлять ссылку на службу, создавать прокси и вызывать. Я хочу создать новый веб-тест (VSTS), который отправляет http-запрос службе и публикует (Http post) запрос в теле http в виде xml.

У меня есть метаданные службы, с помощью которых я могу видеть контракты данных, но у операции wsdl: есть только имя операции, wsdl: input просто пуст.

На Contary служба asmx будет иметь запрос мыла в метаданных, который может быть скопирован как тело запроса http с замененными параметрами.

Как создать тело XML-службы wcf с нуля, просто взглянув на метаданные службы (также нет доступа к журналам службы), получил только конечную точку.

Это что-то вроде

<root>
 <element1>element1</element1>
 <element2>element2</element2>
</root>

Но, как это выяснить, root должен быть похож на

<FunctionRequest xmlns=""http://schemas...."" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"">

(протестирован для локального сервиса и работал)

Теперь, не имея доступа к журналам сервисов (журналы svctraceviewer), не может добавить ссылку на сервис, не может использовать svcutil.exe (сервис на основе сертификатов), только с метаданными - wsdl, есть ли способ найти из запроса, который должен быть отправлен на обслуживание?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Да, можно, но сначала нужно немного поработать.

Создайте клиент службы, запустив svcutil.exe для метаданных wsdl / xsd. Это создаст c # с вашим сервисом и объектами контракта данных. Скомпилируйте это в сборку, используя csc.exe.

См. Мыльный конверт тело , вы можете создать объект запроса и вручную сериализовать его с помощью сериализатора контракта данных. Или вы можете разместить сборку в WcfSvcHost.exe и добавить ведение журнала wcf в файл конфигурации. В любом случае у вас будет только правильный xml для тела, и даже это может быть неправильно, если реальный сервис использует сериализатор xml вместо сериализатора контракта данных.

Следующая часть - это сложная часть, потому что вам нужно знать модель безопасности для реальной услуги. Если он использует только сертификаты для SSL и идентификации сервера, вы сможете отправить XML с помощью WebClient. Но если он использует взаимные сертификаты и / или токены безопасности, вам в значительной степени придется вручную создавать фабрику каналов с правильными привязками.

0 голосов
/ 18 марта 2009

Что ж, вам придется создать прокси-сервер - либо статически, добавив ссылку на службу, либо запустив svcutil в метаданных службы, либо вы можете полностью построить ее динамически в коде, если хотите.

В этом случае вам потребуется под рукой контракт на обслуживание (ISomethingService) и ознакомление с концепцией ChannelFactory () , которая должна помочь вам начать работу.

Марк

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