Некоторое время назад об этой проблеме били.
При проверке подлинности IIS6 и Windows всякий раз, когда я пытаюсь использовать jquery для публикации в службу WCF, вызывается и выполняется метод службы, но все сообщенияданные (аргументы метода) равны нулю.Похоже, это происходит только в версии IE8, установленной на этой машине.Этого не происходит в Firefox, и это также не происходит, как ни странно, при работе fiddler (действующего в качестве прокси-сервера).
Этот код отлично работает в IIS7 и, похоже, работает нормально при анонимной аутентификации IIS6.
Данные публикации - это просто JSON.
$.callService('GetCurrentTemplates', pagingData, GetCurrentTemplateSucceeded, ServiceFailed);
$.callService = function (url, data, successHandler, failHandler) {
var applicationUrl = $("#hdApplicationUrl").val();
$.ajax({
type: "POST", //GET or POST or PUT or DELETE verb
url: applicationUrl + "Service.svc/" + url, // Location of the service
data: $.jsonSerialize(data), //Data sent to server
contentType: "application/json; charset=utf-8", // content type sent to server
dataType: "json", //Expected data format from server
processdata: true, //True or False
success: function (result) {
if (result == null) {
var resultObj = new Object();
resultObj.status = 401;
resultObj.statusText = 'Unauthorized';
$.showError(resultObj);
return;
}
if (successHandler != null && successHandler != undefined)
successHandler(result);
}, // When success
error: function (result) {
$.showError(result);
} // When Service call fails
});
Служба WCF была разработана для использования следующих определений WebServiceHostFactory и web.config:
<services>
<service name="Company.Core.TemplateService" behaviorConfiguration="templateWcfBehavior">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="templateWebHttpBinding" behaviorConfiguration="jsonEndpointBehavior" contract="Company.Core.ITemplateService" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="jsonEndpointBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="templateWcfBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<webHttpBinding>
<binding name="templateWebHttpBinding" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</webHttpBinding>
СлужбаФайл, конечно, находится под анонимным доступом (не аутентификацией Windows).
Если мы запускаем -everything- под анонимным доступом, jquery передает службе соответствующие данные, методы возвращают то, что нам нужно, и т. д.То же самое происходит, если мы выполняем аутентификацию в интегрированном режиме, но у нас на клиенте есть fiddler.
Похоже, что Fiddler изменяет пакеты, чтобы исправить очевидный дефект - возникла проблема, поскольку проблема, кажется, возникает только локально.машина (исключающая использование wireshark / ethereal для перехвата пакетов и определения точных различий).
На этом этапе любой совет / информация, которую вы можете предложить, будет чрезвычайно полезен.
Обновление 2011-09-07: Достаточно интересно, если я обращаюсь в службу поддержки (и asp.net вращаетсяэто) - я могу затем изменить службу с анонимного доступа на встроенную проверку подлинности Windows.Хотя служба уже запущена и активирована, на самом деле все работает идеально.Если я подожду, пока IIS6 сбросит изменения метабазы на диск и запустит IISreset (или перезапустит пул приложений), произойдет сбой.Причина сбоя заключается в том, что «параметры безопасности для этой службы требуют« анонимной »аутентификации, но она не включена для приложения IIS, в котором размещена эта служба».Похоже, я в затруднительном положении.По какой-то причине при анонимном доступе мои настройки сообщения аргумента теряются.Если служба уже запущена, я могу изменить файл на интегрированный режим аутентификации, и все будет работать.Если служба не запускается (или теряется при перезапуске пула приложений) и для нее установлен режим аутентификации в интегрированном режиме, произойдет сбой с ошибкой, отмеченной выше.О Боже!