Вызов WCF / JSON / REST WebService из JavaScript с использованием jQuery / Ajax

Я знаю, что есть много вопросов по этому поводу - поверьте, я прочитал много из них и попробовал найти ответы вне.

(Этот проект предназначен для внутренней сети компании, а не в Интернете)

У нас есть веб-сервис WCF, который RESTFUL и отправляет / получает JSON, для этого требуется NTLM (Curb также подойдет) auth / credentials, чтобы гарантировать, что вызывающий пользователь (из браузера - это тот, кем они называют себя ), и это согласовывается между браузером / клиентом и службой с помощью привязок WCF:

 
  
    
      
        
      
    
  

Используя Fiddler, я могу успешно вызывать методы службы GET и POST и при условии, что я настрою JSON, который мы отправляем в веб-службу. (например, для включения идентификатора сеанса) он проходит успешно.

Проблемы начались, когда мы попытались использовать JavaScript / jQuery для вызова веб-службы; идея состоит в том, что веб-сервер будет предоставлять HTML / JS клиентскому браузеру, затем браузер должен вызвать веб-сервис WCF, чтобы получить сеанс и позволить пользователю выполнить несколько действий (всего у нас есть 3 метода).

В первую очередь, мы столкнулись с проблемой X-домена, которую мы попытались решить, заставив веб-сервер вернуть правильные заголовки (Access-Control-Allow-Origin). Это не помешало браузерам, таким как SRIron, сообщить нам об этом;

XMLHttpRequest cannot load http://{webServiceUri}/InstantMessagingService/chat/start/{username}. Origin http://{web**Server**Uri} is not allowed by Access-Control-Allow-Origin.

После этого я исследовал возможность использования Silverlight (похоже, не поддерживает NTLM-аутентификацию через WebHttpBinding), обратный прокси-сервер отключен, поскольку используется сервер IIS in dev не будет использоваться в prod (я полагаю это WebSphere, но не под нашим контролем); затем я посмотрел на это:

http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspx

Который у меня сложилось впечатление, что веб-служба WCF на самом деле была тем, что нужно было сообщить браузеру, откуда ей разрешено вызывать (если это имеет смысл). Реализовав весь код из этого примера, я обнаружил, что ApplyClientBehavior никогда не вызывался для попытки вернуть заголовки клиенту (отслеживая это также в Fiddler). Еще несколько поисков в Google привели меня к:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/707aa031-f4ff-47ab-ba5b-730f7930605e/

Поскольку мы получаем доступ веб-сервис, использующий jQuery, а не какую-то ссылку на клиент / службу .NET / прокси / приложение ... мля, я думаю, что невозможно предварительно запросить отправку этих заголовков, чтобы разрешить доступ к службе. Кроме того, Fiddler, похоже, думает, что он получает 401 Unauthorized, когда пытается вызвать метод http: //../chat/start/ ...

Вот jQuery I ' m с помощью, чтобы попытаться выполнить вызов (я предоставил несколько настроек в надежде, что это сработает):

var url = webserviceUrl + "chat/start/" + remoteUserUri;

$.ajax({
    type: 'GET',   
    url: url,
    crossDomain: true,
    beforeSend: function(xhr){ xhr.withCredentials = true; },
    contentType: "application/json; charset=utf-8",               
    success: function (data) { conversationStarted(data); },
    dataType: 'json'
}); 

Хорошо, если у кого-то есть полезные подсказки или идеи, пожалуйста, увольняйте. Я отвечу и отредактирую и т. Д., Чтобы убедиться, что это актуально. Надеюсь, я ничего не пропустил (но у меня немного кружится голова от моего поиска в Google).

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

9
задан ROMANIA_engineer 19 October 2017 в 07:40
поделиться