#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 была небольшая ошибка, которую я пропустил. Теперь я могу создать ссылку на службу.