SOAP-клиент в .NET – ссылки или примеры?

Задний план:

Я создаю сайт webservices, который будет предоставлять множество типов простых сервисов поверх SOAP и, возможно, других протоколов. objective состоит в том, чтобы упростить работу, например, конверсии, синтаксический анализ RSS, проверки спама и многие другие виды работы. Сайт будет ориентирован в основном на начинающих разработчиков.

Моя проблема:

Я никогда не разрабатывал ни C #, ни .NET. Я несколько лет назад взломал несколько VB6, но все. Теперь мне нужны некоторые примеры выполнения RPC-вызовов через SOAP в C # . Я попытался найти в Интернете и Stack Overflow, чтобы найти это, но не нашел много ресурсов, и я не знаю, как ранжировать ресурсы (которые являются старыми?, Которые являются неправильными? И т. Д.).

Я создал простой пример службы, который в PHP называется так:

getCurrentYear(); //This method returns an integer, called "year" ?> 

Теперь я хочу называть этот метод как можно проще на C #. Все ссылки и примеры очень приветствуются. С чего бы мне начать? Какие classы / модули / что я могу использовать?

Решение не обязательно должно включать SOAP вообще, если есть более совершенные коммуникационные frameworks (задняя часть предназначена для расширения), но обратите внимание, что серверная часть реализована в PHP на Unix, поэтому для проприетарных решений Microsoft не может быть и речи о на стороне сервера.

Обратите внимание, что мне это нужно, поэтому я могу написать документацию, возможную для J. Random Web Developer, чтобы следовать (даже если они находятся на общедоступном веб-хостинге). Поэтому я считаю, что лучший подход должен заключаться в том, чтобы делать это только в коде, но даже другие способы сделать это, конечно, приветствуются.

Насколько я понимаю, вы хотите вызвать свой веб-сервис из клиентского приложения C #. У вас уже есть служба и опубликованный файл WSDL (исправьте меня, если я ошибаюсь). Теперь самый простой способ – создать прокси-classы в приложении C # (этот процесс называется добавлением служебной ссылки). Есть два основных способа сделать это: .NET предоставляет службы ASP.NET, который является старым способом SOA и WCF, как предложил Джон, который является последней средой от MS и предоставляет множество протоколов, включая открытые и MS-приложения.

Теперь, достаточно теории и позволяет делать это шаг за шагом

  1. Откройте свой проект (или создайте новый) в визуальной студии
  2. Щелкните правой кнопкой мыши на проекте (в проекте, а не на решении) в обозревателе решений и нажмите Добавить ссылку на службу
  3. Диалоговое окно должно появиться на скриншоте ниже. Введите URL-адрес вашего wsdl-файла и нажмите «ОК». Обратите внимание: если вы получите сообщение об ошибке после нажатия ok, попробуйте удалить? Wsdl part из url. экран

  4. Разверните ссылки службы в обозревателе решений и дважды щелкните ServiceReference1 (имя может отличаться). Вы должны увидеть сгенерированное имя и пространство имен прокси. В моем случае пространство имен – это WindowsFormsApplication1.ServiceReference1, имя прокси-classа – Service1Client. Как я сказал выше, имена classов могут отличаться в вашем случае. введите описание изображения здесь

  5. Перейдите к исходному коду C #. Добавить using WindowsFormsApplication1.ServiceReference1 .

  6. Теперь вы можете позвонить в службу таким образом.

Service1Client service = new Service1Client();

int year = service.getCurrentYear();

Надеюсь, что это поможет, если вы столкнетесь с какой-либо проблемой, сообщите нам об этом.

Я сделал довольно много того, о чем вы говорите, и SOAP-совместимость между платформами имеет одно основное правило: CONTRACT FIRST. Не выводите WSDL из кода, а затем пытайтесь создать клиент на другой платформе. Все, что больше, чем функции типа «Hello World», скорее всего, не сгенерирует код, не сможет говорить во время выполнения или (мой любимый), не сможет правильно отправлять или получать все данные без повышения ошибки.

Тем не менее, WSDL – сложный, неприятный материал, и я избегаю писать его с нуля, когда это возможно. Ниже приведены некоторые рекомендации по надежному взаимодействию служб (с использованием веб-ссылок, WCF, Axis2 / Java, WS02, Ruby, Python и т. Д.):

  • Идем дальше и делаем код сначала для создания вашего начального WSDL. Затем удалите свой код и заново создайте class (ы) сервера из WSDL. Практически на каждой платформе есть инструмент для этого. Это покажет вам, какие странные привычки для вашей конкретной платформы есть, и вы можете начать настройку WSDL, чтобы быть более простым и понятным. Tweak, re-gen, повторите. Вы так много узнаете, и это портативные знания.
  • Придерживайтесь простых classов старого языка (POCO, POJO и т. Д.) Для сложных типов. НЕ используйте конструкции, специфичные для платформы, такие как List <> или DataTable. Даже PHP-ассоциативные массивы, как представляется, работают, но терпят неудачу, которые трудно отлаживать на разных платформах.
  • Придерживайтесь основных типов данных: bool, int, float, string, date (Time) и массивов. Скорее всего, чем конкретнее вы узнаете о типе данных, тем менее проворным вы будете с новыми требованиями с течением времени. Вы не хотите менять свой WSDL, если можете его избежать.
  • Одно исключение из вышеперечисленных типов данных – дать себе механизм NameValuePair. Вы не поверите, сколько раз список этих вещей спасет ваш бекон с точки зрения гибкости.
  • Задайте реальное пространство имен для вашего WSDL. Это не сложно, но вы не можете поверить, сколько веб-сервисов я видел в пространстве имен «http://www.tempuri.org». Кроме того, используйте URN («urn: com-myweb-servicename-v1», а не пространство имен на основе URL-адреса («http://servicename.myweb.com/v1»). Это не веб-сайт, это абстрактный набор символов который определяет логическую группировку. Вероятно, у меня дюжина людей звонили мне за поддержкой и говорили, что они пошли на «сайт», и это не сработало.

🙂

Если вы можете заставить его работать в браузере, то что-то простое, как это будет работать

 var webRequest = WebRequest.Create(@"http://webservi.se/year/getCurrentYear"); using (var response = webRequest.GetResponse()) { using (var rd = new StreamReader(response.GetResponseStream())) { var soapResult = rd.ReadToEnd(); } } 

Взгляните на « использование служб WCF с PHP ». Это объясняет основы того, что вам нужно.

Как обобщение теории:

WCF или Windows Communication Foundation – это технология, позволяющая определять абстрагированные сервисы с помощью метода – основного метода связи – они будут вызываться.

Идея заключается в том, что вы определяете контракт о том, что делает служба и что предлагает услуга, а также определяют другой контракт, какой метод связи используется для фактического потребления услуги, будь то TCP, HTTP или SOAP.

У вас есть первая часть статьи здесь , объясняя, как создать очень базовую службу WCF.

Больше ресурсов:

Использование WCF с PHP5 .

Также взгляните на NuSOAP. Если вы сейчас NuSphere, это инструментарий, позволяющий вам подключаться с PHP к службе WCF.

Вы ищете не то место. Вы должны найти Windows Communication Framework .


WCF используется как на клиенте, так и на сервере.

Здесь вы можете найти хороший учебник для вызова веб-сервиса на основе NuSOAP из клиентского приложения .NET. Но IMO, вы также должны рассмотреть WSO2 Web Services Framework для PHP (WSO2 WSF / PHP) для обслуживания. См. WSO2 Web Services Framework для PHP 2.0 значительно расширяет единственную в отрасли библиотеку PHP для создания как SOAP, так и REST-сервисов . Об этом также есть веб-мастер .

Теперь, в мире .NET, я также рекомендую использовать WCF с учетом проблем взаимодействия. Пример совместимости можно найти здесь , но в этом примере вместо PHP используется клиент PHP + client + WCF. Не стесняйтесь внедрять PHP-сервис и WFC-клиент.

На сайте codeplex.com есть некоторые связанные с WCF проекты с открытым исходным кодом, которые я нашел очень продуктивными. Эти проекты очень полезны для разработки и внедрения Win Forms и приложений Windows Presentation Foundation: Smart Client , Web Client и Mobile Client . Они могут использоваться в сочетании с WCF для разумного вызова любых веб-сервисов.

Вообще говоря, команда моделей и практик суммирует передовые методы и проекты в различных проектах с открытым исходным кодом, которые имеют дело с платформой .NET, специально для Интернета. Поэтому я считаю, что это хорошая отправная точка для любого дизайнерского решения, связанного с .NET-клиентами.

  • WCF - Как увеличить размер сообщения
  • Эффективный способ отправки изображений через WCF?
  • Как десериализация WCF создает объекты без вызова конструктора?
  • Вызов службы WCF с помощью VBScript
  • Как использовать пользовательскую сериализацию или десериализацию в WCF, чтобы принудительно создать новый экземпляр для каждого свойства datacontact?
  • Ведение журнала исключений для служб WCF с использованием ELMAH
  • Как вернуть чистый JSON из службы WCF?
  • Ошибка WCF. Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт UserService.UserService.
  • Кэширование в WCF?
  • Служба проверки подлинности с использованием WCF
  • Лучший способ поддерживать данные «application / x-www-form-urlencoded» с WCF?
  • Interesting Posts
    Давайте будем гением компьютера.