$ .ajax отправляет нулевые параметры в wcf в IE - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть интерфейс ниже, который определяет мои службы WCF. Иногда параметр «параметры» был нулевым, когда это вызывается. В других случаях это не так.

[ServiceContract]
public interface IContactRelationshipManager
{
  [OperationContract]
  [WebInvoke(
    Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Wrapped)]
  void SaveActivityLogEntry(SaveActivityLogEntryParameters parameters);
}

Вот мой раздел поведения в app.config (я запускаю это как службу Windows)

<behaviors>
  <endpointBehaviors>
    <behavior name="jsonBehavior">
      <webHttp />
    </behavior>
  </endpointBehaviors>
  <serviceBehaviors>
    <behavior name="ContactRelationshipManagerBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>
</behaviors>

Вот мой вызов JavaScript:

$.ajax(
{
  type: "POST",
  cache: false,
  contentType: "application/json",
  url: serviceCallUrl,
  data: JSON.stringify(params),
  success: callbackHandler
});

Результат JSON.stringify(params) равен

"{" параметры ": {" ContactEmailAddress ":" blah@gmail.com " "LiasonsForContact": [25], "ActivityLogEntry": { "Дата": "/ Дата (1316634966273) /"," LiasonFK ": 25," TypeFK ": 1," MethodFK ": 3," Описание ":" ТТ " "ContactFK": 32}}}"

Есть ли что-то, что я делаю здесь не так на практике? Это прекрасно работает все время в Chrome и Firefox. Я также только что проверил это с Fiddler во время отладки службы, и параметр вернулся с нулевым значением при закрытом Fiddler и НЕ с нулевым значением при открытом Fiddler.

Ответы [ 3 ]

1 голос
/ 22 сентября 2011

Я закончил тем, что поиграл с кучей разных техник, чтобы заставить его работать, включая получение потока в качестве параметра моей функции и сериализацию его внутри функции с JSON.NET. Это тоже не сработало. Я наконец нашел этот вопрос , который заставил меня поверить, что это была проблема NTLM. Мой веб-сайт использует проверку подлинности Windows в IIS7 и вызывает службу WCF, размещенную в качестве службы Windows. На стороне сервера я изменил безопасность на своем webHttpBinding так:

<binding name="webBinding">
  <security mode="TransportCredentialOnly">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
      realm="" />
  </security>
</binding>

После этого все отлично работает в Internet Explorer

0 голосов
/ 22 сентября 2011

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

contentType: "application/json; charset=utf-8"
dataType: "json"
processData: false
0 голосов
/ 22 сентября 2011

Можете ли вы использовать Fiddler, например, чтобы узнать, что на самом деле отправляется? Я обычно передаю объект данных напрямую $.ajax и позволяю ему обрабатывать сериализацию объекта. У меня есть предположение, что строковый JSON кодируется неправильно.

...