междоменная публикация jquery в сервис wcf без прокси - PullRequest
1 голос
/ 20 января 2011

У меня сложное решение, которое я пытаюсь решить.

У меня есть служба wcf (.net 4.0), размещенная на сервере 1. Сервер 1 совместим с PCI.

Сервер 2 -веб-сайт клиента.На этом сайте размещена форма кредитной карты.У этого также есть плагин jquery, который захватывает почту формы.Сервер 2 не совместим с PCI.

Данные в форме кредитной карты не могут быть отправлены на Сервер 2.

Итак, я пытаюсь позвонить в службу wcf (json in, json out) из моего плагина jquery.Я не могу использовать прокси на сервере 2, потому что это будет означать, что мои данные отправляются на этот сервер.

Таким образом, данные формы должны отправляться с клиентского компьютера напрямую на сервер 1 при полном обходе сервера server2.

Я видел несколько сообщений об использовании файла crossdomain.xml на Сервере 1, однако я все еще получаю сообщение об ошибке:

XMLHttpRequest не может загрузить http://server1/MySite.Services/PaymentService.svc/SubmitCreditCardPayment. Origin http://server2 недопустимо Access-Control-Allow-Origin.

Есть ли способ сделать междоменный вызов ajax в службу WFC с входами json и json?

Я не обязан использовать jquery ajax для этого.Если у вас есть другое решение, использующее jquery для отправки кросс-домена данных, я хотел бы услышать его.

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

Чтобы пояснить, вот как выглядит мой сервис.

PaymentResponse SubmitCreditCardPayment(CreditCardRequest request);

Объекты запроса и ответа - это просто классы со свойствами (DataContract / DataMember).

1 Ответ

0 голосов
/ 20 января 2011

Вы пробовали JSONP ?

Это простой способ вызова службы на сервере server1 с клиента с помощью тега script, который не имеет ограничений по исходной цели. Чтобы интерпретировать этот ответ json в вашей js env, вам нужен обратный вызов (скажем, foo(data)), и вам нужно установить это имя обратного вызова в запросе ajax в качестве параметра GET. И целевой ajax-сервис будет заключать его ответ json вызовом foo; foo({json: things}).

Edit: Отвечая на ваше замечание: вы тестировали JSON-P, но он не защищен (и используете GET):

Вы правы. JSON-P не очень хорош для безопасности. Но CORS уменьшит количество браузеров, разрешенных для вашего приложения (только самые последние браузеры). У вас есть сообщение об ошибке CORS. Если вы сделали запрос в js, то у вас просто есть проблема с реализацией CORS, более старый браузер должен был бы использовать запасной вариант JSON-P.

Таким образом, даже при использовании jQuery magic функций ajax у вас будет проблема с использованием плохо защищенного json-p или плохо поддерживаемого CORS.

Еще одно решение состоит в том, чтобы сервер2 являлся поддоменом сервера1, но для платежей по кредитным картам я предполагаю, что это не ваш случай.

Файл crossdomain.xml существует только для приложения Flash , но не для js, но вы можете использовать его для выполнения всего процесса ajax во флэш-памяти (удушье), уменьшая количество Люди могут снова использовать ваше приложение, но на основе (недавней) поддержки Flash. О боже, я говорю о флэш-памяти как о реальном решении ...

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