Посылка вызова WCF с AJAX - PullRequest
5 голосов
/ 12 марта 2010
  1. Требуется ли для использования RESTful сервис, чтобы иметь возможность сделать AJAX вызов службы wcf (например, с помощью WebInvoke атрибут на операции контракты)
  2. Как только сервис сделан RESTful путем добавления привязки webHttp на хосте сервиса, могут ли хост иметь другие конечные точки? (wsHttp или netTcp)
  3. Требуется ли , чтобы для aspNetCompatibilityEnabled было установлено значение true для службы, имеющей привязку webHttp (и может ли этот параметр сосуществовать для других конечных точек)
  4. Я понимаю, что могу использовать как JQuery, так и ScriptManager для выполнения вызовов WCF на клиенте. Почему я должен использовать один над другим?

1 Ответ

4 голосов
/ 12 марта 2010

Ответы

  1. номер
    AJAX обычно используется для отправки простых запросов HTTP GET ("REST"). Так не должно быть. Вы также можете отформатировать полезную нагрузку, используя конверт SOAP, и отправить ее в конечную точку. В этом случае служба WCF должна быть, по крайней мере, wsHttp или basicHttpBinding. Вот пример использования VBScript для создания и отправки SOAP-запроса , но вы можете сделать то же самое в Javascript. Вы не можете использовать более продвинутые расширения SOAP, такие как WS-Security, XML DigSig и так далее. Ну, вы могли бы , но это было бы непрактично. Например, я не знаю ни одной библиотеки канонизации XML в Javascript, которая необходима для выполнения WS-Security или цифровых подписей. Есть 17 подобных препятствий. Результат: вы не можете использовать более продвинутые расширения SOAP при вызове из Javascript.
    .
    Если вы используете jQuery ajax, вам потребуется обратный вызов beforeSend в запросе ajax для установки заголовка SOAPAction.
    .
    Сказав это, гораздо проще обрабатывать json в программе Javascript, чем обходить DOM XML-документа. Другими словами, вам лучше использовать JSON / REST при подключении из Javascript к WCF вместо SOAP. Иногда это не вариант, я думаю.

  2. Да
    Служба WCF может иметь несколько конечных точек, и они могут прослушивать один и тот же или разные транспорты, такие как HTTP, net.tcp, net.pipe или net.msmq.

  3. Нет. aspNetCompatibilityEnabled просто включает некоторые ASMX-подобные функции на сервере. Это влияет на то, как устроен сервис, и не зависит от подписи сообщения. Это исключает использование не HTTP-протоколов. Подробнее об этом см. Статью Вэньлун Донга .

  4. Какую платформу использовать на клиенте - что проще? У меня нет опыта работы с ScriptManager, но критерии принятия решения довольно просты. jQuery прекрасно работает и подходит, если вы уже используете jQuery. Если у вас нет или вы хотите использовать jQuery, вы можете использовать XmlHttpRequest для отправки запросов SOAP или REST. Если это как-то неуместно, используйте что-то еще.

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