Что использовать ... REST, ASMX, WSE или WCF? - PullRequest
1 голос
/ 02 июня 2009

У меня есть служба Windows, которая выполняет определенную функцию, а затем должна отправить эту информацию в веб-службу для обработки. Веб-сервис размещается удаленным веб-приложением. Я пытаюсь выяснить, как лучше всего вызвать веб-сервис (ы), поскольку каждое веб-приложение может быть только 2.0 или 3.5 и т. Д. В моей службе Windows я определяю каждого «клиента» в app.config, например,

<Client WebServiceUrl="http://location.com/webservice.svc" Username="" Password="">

</Client>

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

РЕДАКТИРОВАТЬ:

Я попробую перефразировать .. Служба Windows запускается каждые 30 секунд и получает список информации. Сервис поддерживает несколько «клиентов», как показано выше. Когда выполняется каждый клиентский процесс, данные собираются и затем должны быть отправлены во вспомогательное веб-приложение.

Служба Windows не знает, что делать с данными, она просто отправляет их. Каждое веб-приложение для клиента находится в разных местах и ​​может быть встроено в 2.0, 3.5, PHP и т. Д. Все, что заботит служба Windows, - это то, что когда она выполняет свою обработку для клиента, она может отправлять данные в расположение веб-службы, определенные в app.config службы Windows.

То, что я пытаюсь определить, это как подключиться к веб-сервису (который я склоняюсь к WCF, однако Basic или WS не уверен), и какие правила нужно определить для веб-приложения в том, как создать ответ.

Если служба Windows должна поддерживать приложения php и т. Д., WSHttpBinding не будет вариантом, что будет означать, что BasicHttpBinding будет работать. Другая вещь, которую нужно решить - использовать или нет службу RESTful или службу SOAP.

Надеюсь, это имеет больше смысла.

1 Ответ

10 голосов
/ 02 июня 2009

Мне не совсем понятно, что вы делаете.

Похоже, у вас есть 3 вещи: служба Windows, а затем веб-служба, размещенная в веб-приложении.
Я думаю, что ваш вопрос, что использовать, REST, ASMX, WSE или WCF, при подключении приложения-службы Windows к удаленной веб-службе .

ASMX, WSE и WCF являются альтернативными моделями программирования для веб-службы. REST не является моделью программирования. Это не так, как остальные три.

ASMX и WSE потребуют использования веб-служб и SOAP.
WCF может позволить вам использовать Web-сервисы и SOAP, REST (XML или JSON) по HTTP или двоичный формат по TCP, а также другие опции.

Поскольку это гибкая и современная технология, я бы порекомендовал WCF. ASMX теперь называется Microsoft «устаревшей технологией». Это не значит, что он не будет работать, но он не будет получать обновления. (Очень похоже на WinForms против WPF). Насколько я знаю, WSE больше не поддерживается мейнстримом. По этим причинам я бы не рекомендовал начинать новый проект ни на WSE, ни на ASMX.


WCF является более общим, чем ASMX, и по этой причине может показаться более сложным. Но как только вы сделаете несколько вариантов и сконцентрируетесь на том, что хотите (например, выберите HTTP и REST или двоичный файл и TCP), это станет более мощным. WCF может использоваться как модель программирования как на клиенте, так и на отправителе (в вашем случае, я думаю, в Windows Service) и / или на сервере (веб-сервис, размещенный в веб-приложении).

Использование WCF на стороне клиента не означает, что вы должны использовать его на стороне сервера, и наоборот. С другой стороны, если вы управляете исходным кодом на обоих концах, я бы рекомендовал использовать WCF с обеих сторон.

Что касается "как реализовать правила для веб-приложения" - я не понимаю, о чем вы там спрашиваете. Может быть, если вы будете более конкретны по этому вопросу, кто-то сможет помочь.


Обновление: основываясь на вашем дополнительном объяснении, я предлагаю вам взглянуть на материал REST в WCF для .NET 3.5. В PHP очень просто реализовать сервис в стиле REST, а с WCF то же самое верно для .NET. Теперь в вашем случае служба Windows - это клиент , и она отправляет запрос, запрос на обновление, на различные серверы , которые находятся в сетях ваших клиентов. Согласно принципам REST, я отправляю эти исходящие запросы PUT или POST в зависимости от семантики вызова.

Затем вы можете отправить пример кода обслуживания своим клиентам (в верхнем регистре), чтобы они начали создавать то, что им нужно для получения ваших исходящих сообщений PUT / POST.

Безопасность - это проблема. Вы вообще не упомянули об этом, что удивительно. Безопасность не относится к числу тех вещей, которые лучше всего откладывать, так что вы «добавите это позже». Вы должны подумать об этом рано - это может повлиять на выбор протокола, который вы делаете. Например, если вам необходимо взаимно аутентифицировать клиентов и серверы (последние в сетях ваших «прописных» клиентов), то вы можете использовать SOAP, который предоставляет вам хорошие параметры на стороне протокола для обеспечения безопасности. Расширения защищенных веб-служб (WS-Sec и т. Д.) Хорошо поддерживаются в WCF, но не уверены в состоянии этой возможности в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...