Реализация SOAP-клиента на C # с помощью WCF и .NET 4.0

#c# #wcf #web-services #soap

#c# #wcf #веб-сервисы #soap

Вопрос:

У меня возникли проблемы с началом работы с WCF в .NET 4.0. Это моя ситуация:

Я создал небольшой SOAP-сервер на PHP. У меня есть проект на C #, в котором я хочу подключиться к этому серверу и инициировать обмен данными по SOAP.

Моя проблема в том, что я понятия не имею, как это сделать на C #. Я не могу найти правильное введение в WCF. Есть способы сделать это. Но я не могу найти нужные классы и ссылки для добавления в мой проект на C #. Есть ли какие-либо руководства, как достичь этого на C #? Я много искал и не нашел ничего, что помогло бы мне.

Я хочу загрузить WSDL со своего SOAP-сервера во время выполнения, выполнить SOAP-запрос, получить ответ и готово. Но с чего я могу начать? Сайт MSDN о WCF только еще больше сбивает меня с толку.

Редактировать: Вероятно, нет необходимости извлекать файл WSDL во время выполнения. Так что это больше не нужно.
Я использовал svcutil для создания класса и внедрил его в свой проект. Я еще не смог его протестировать, потому что у меня возникли некоторые проблемы с базой данных MySQL (она запущена и доступна из инструмента командной строки mysql или mysqladmin, но я не могу подключиться к ней с помощью какой-либо другой программы …). Я сообщу, как только узнаю, работает ли это.

Правка 2: я следовал подходу Kevs, и в итоге это сработало очень хорошо. Моя последняя проблема заключалась в том, что я использовал класс Service в DLL. Мне нужен был app.config в программе, которая также использовала DLL. После того, как я это сделал, все получилось хорошо.

Комментарии:

1. Это не то, что вы обычно делаете в .NET. Обычно вы импортируете WSDL во время разработки и заставляете его генерировать прокси-сервер клиента, добавляя ссылку на службу. Зачем вам нужно извлекать WSDL во время выполнения?

2. После проведения дополнительных исследований я думаю, что в этом действительно нет необходимости. Я думаю, мне это не понадобится, и это не так просто работает.

Ответ №1:

Самый быстрый способ сделать это — щелкнуть правой кнопкой мыши «Добавить ссылку на службу» в проекте вашего клиента в разделе Ссылки. Наведите диалог на местоположение WSDL и нажмите Перейти:

введите описание изображения здесь

URL, который я использовал, был в стиле ссылки на службу .NET, вам нужно будет заменить на любой другой, который использует ваша служба PHP SOAP для предоставления доступа к своему WSDL.

Выполнение этого приведет к созданию прокси-сервера на стороне клиента, который вы можете создать для взаимодействия с вашим веб-сервисом.

Затем для доступа к сервису вы можете сделать что-то вроде (хотя ваша конкретная реализация не будет такой же):

 MyService.MyWebServiceSoapClient ws = new MyService.MyWebServiceSoapClient();
string result ws.DoThing();
  

Обратите особое внимание на SoapClient часть имени прокси-класса, она добавляется к имени soap-службы генератором кода прокси.

Генератор прокси также создаст всю необходимую конфигурацию в вашем web.config или app.config файле.

Комментарии:

1. Хотя я согласен, что это самый быстрый способ использования сервиса, OP специально запросил загрузку WSDL во время выполнения.

2. @thorarin — хотя это может быть правдой, он также может думать, что классы soap создаются динамически (вроде как в стиле SOAP SDK с поздней привязкой VB6 / VBScript) каждый раз, когда вам нужно использовать конечную точку, и может не знать, что он может сгенерировать прокси только один раз.

3. Это правда, что я рассматривал генерацию во время выполнения. Но я трачу больше времени на исследования и думаю, что перейду к импорту. Еще одно замечание: Добавить ссылку на службу в моем случае так не работало. Мне пришлось пройти через диалоговое окно «Дополнительно» и добавить веб-ссылку. В нем говорилось, что он совместим с .NET 2.0. Для меня это не выглядело оптимальным.

4. @skalli — можете ли вы опубликовать свой WSDL? Там может быть что-то, что не нравится генератору прокси WCF?

5. @Kev: Нашел его сегодня, в WSDL была небольшая ошибка, которую я пропустил. Теперь я могу создать ссылку на службу.