Вызов службы WCF - без добавления ссылки

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

У меня есть метаданные службы, с помощью которых я могу видеть контракты данных, но wsdl:operation имеет только имя операции, 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, есть ли способ узнать запрос то есть отправить в сервис?


person Community    schedule 17.03.2009    source источник


Ответы (2)


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

В этом случае вам нужно будет иметь под рукой контракт на обслуживание (ISomethingService) и проверить ChannelFactory ‹ ISomethingService > () — это должно помочь вам начать работу.

Марк

person marc_s    schedule 17.03.2009

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

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

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

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

person Huusom    schedule 09.02.2012