Ответ 1
Проверьте следующее:
https://github.com/dylanmei/linqpad-soap-driver
Это сторонний драйвер LINQPad для веб-сервисов на основе SOAP.
Я хочу подключить LinqPad к веб-службе WCF, которая предоставляет свою информацию WSDL в URI формы http://server.example.com/Product/Service/Version/Soap11?wsdl
. Я могу успешно добавить этот URI в качестве ссылки на веб-службу Visual Studio WCF, и он также работает с WcfTestClient.
Фактическая конечная точка службы при подключении к методам вызова составляет http://server.example.com/Product/Service/Soap11
.
Когда я пытаюсь добавить веб-службу в качестве соединения LinqPad, если я укажу URI веб-службы, включая запрос ?wsdl
, я получаю сообщение об ошибке LinqPad с сообщением "ArgumentException: ожидаемый абсолютный, хорошо сформированный URL-адрес http без запрос или фрагмент. Имя параметра: serviceRoot". Если я опускаю запрос ?wsdl
, вместо этого получаю ответ 400 Bad Request
.
(Я получаю тот же ответ 400 Bad Request
, когда пытаюсь создать ссылку на веб-службу Visual Studio, или добавьте службу в WcfTestClient, не добавляя ?wsdl
в URI).
Есть ли что-нибудь, что я могу изменить на стороне клиента, чтобы LinqPad смог успешно подключиться к этому веб-сервису? Или мне нужно возиться с конфигурацией на сервере? Я не контролирую веб-службы, к которым я пытаюсь подключиться, но я могу настроить некоторые файлы конфигурации на сервере, если это необходимо.
Проверьте следующее:
https://github.com/dylanmei/linqpad-soap-driver
Это сторонний драйвер LINQPad для веб-сервисов на основе SOAP.
Похоже, я неверно истолковал область действия LINQPad "Добавить соединение". Это только для служб данных WCF (которые реализуют спецификацию OData), а не для веб-служб WCF в целом. (Разница между службами WCF в целом и службами данных WCF специально ранее мне не была понятна).
Службы, к которым я пытаюсь подключиться, являются веб-службами WCF, но не являются веб-службами службы WCF Data Service. Оказывается, правильный способ использования этих веб-сервисов из LINQPad состоит в том, чтобы сгенерировать код прокси-класса и файл конфигурации с помощью svcutil.exe, который затем может быть скомпилирован через VS или csc.exe, и затем добавляется итоговая сборка как стандартная ссылка на сборку в LINQPad. Затем прокси-классы можно использовать в LINQPad так же, как они используются в Visual Studio.
Это действительно зависит от того, где ваши сильные стороны. Нелегко судить по этому вопросу, поскольку он описывает только попытки запуска автоматизированных инструментов. Вопросы в SO обычно имеют "то, что я пробовал до сих пор". Это не только поощрение усилий до публикации, но и возможность узнать, какие варианты можно предложить.
Один большой вопрос заключается в том, что вы знаете достаточно (или готовы прочитать) работу функции ссылки на службу добавления, чтобы воспроизвести ее в коде. Или если вы можете найти проект с открытым исходным кодом с надлежащим лицензированием, чтобы использовать его.
Я бы посоветовал вам заглянуть в запись значений LINQPad.
Я предложу альтернативный ответ, который поможет, если вы ориентируетесь на службу, использующую аутентификацию. В моем случае служба использует аутентификацию Windows, которую мыльный драйвер linqpad пока не поддерживает. Вы будете генерировать код клиента с помощью svcutil.exe
, компилировать его в сборку и затем создавать запрос Linqpad для его использования.
Создайте свой сервисный клиент & файл конфигурации с svcutil.exe http://mylocalsite/myservice.svc
- он должен создать файл myservice.cs
и output.config
.
Скомпилируйте клиентский код в сборку: csc myservice.cs /target:library
. Теперь у вас должен быть myservice.dll
.
Создайте запрос linqpad и перейдите в его свойства (F4). На вкладке App.config установите пользовательский путь к файлу output.config
. В разделе "Дополнительные ссылки" добавьте ссылку на myservice.dll
.
Ваш запрос будет очень простым, что-то вроде:
var client = new MyServiceClient("BasicHttpBinding_IMyService");
var result = client.DoTheThing();
result.Dump();
client.Close();
LinqPad, скорее всего, предложит вам добавить ссылку на System.Web.Services
.