[c#] SOAP-клиент в .NET - ссылки или примеры?



Answers

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

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

  • Идем дальше и делаем код сначала для создания вашего начального WSDL. Затем удалите свой код и заново создайте класс (ы) сервера из WSDL. Практически на каждой платформе есть инструмент для этого. Это покажет вам, какие странные привычки для вашей конкретной платформы есть, и вы можете начать настройку WSDL, чтобы быть более простым и понятным. Tweak, re-gen, повторите. Вы так много узнаете, и это портативные знания.
  • Придерживайтесь простых классов старого языка (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»). Это не веб-сайт, это абстрактный набор символов который определяет логическую группировку. Вероятно, у меня дюжина людей звонили мне за поддержкой и говорили, что они пошли на «сайт», и это не сработало.

</rant> :)

Question

Задний план:

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

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

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

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

<?php
$client = new SoapClient('http://webservi.se/year'); //URL to the WSDL
echo $client->getCurrentYear(); //This method returns an integer, called "year"
?>

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

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

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




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

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

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

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

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

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

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

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




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

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

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

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






Links