WCF Ajax Call не работает с Jquery $ .ajax - PullRequest
4 голосов
/ 26 августа 2010

У меня есть следующий jQuery (имя службы изменено):

var url = "http://localhost/services/MyService.svc/addentrant";
var stuff = $("#signup-form").serializeArray();

$.ajax({
    type: "POST",
    url: url,
    contentType: "application/json; charset=utf-8",
    data: stuff,
    timeout: 10000,
    success: function (obj) { alert('yay!'); }
});

Выше делается запрос к службе WCF, размещенной в Sitefinity на моем локальном сервере IIS7.5.Ниже приведен соответствующий файл web.config:

<endpointBehaviors>
<behavior name="jsonBehavior">
  <webHttp/>
</behavior>
...
<serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
...
<services>
 <service behaviorConfiguration="DefaultBehavior" name="Services.MyService" >
        <endpoint address="" behaviorConfiguration="jsonBehavior" binding="webHttpBinding" contract="Services.IMyService" bindingConfiguration=""/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
 </service>
...

Наконец, интерфейс и реализация MyService:

[ServiceContract(Name = "MyService", Namespace = "http://myservice.com/services/2010/")]
public interface IMyService
{
    [OperationContract,
    WebInvoke(Method = "POST",
              ResponseFormat = WebMessageFormat.Json,
              BodyStyle = WebMessageBodyStyle.WrappedRequest,
              UriTemplate = "addentrant")]
    void AddEntrant(string firstName);
}
...
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyervice
{
...
    public void AddEntrant(string firstName)
    {
        Entrant entrant = new Entrant()
        {
            FirstName = firstName,
        };
        context.Entrants.InsertOnSubmit(entrant);
        context.SubmitChanges();
    }
}

Я думаю, это все.В любом случае, вызов $ .ajax возвращает успех, но метод веб-службы не вызывался (у меня была установлена ​​точка останова). Я открыл Fiddler и обнаружил, что мне дают 405: Метод не разрешен .Я видел это раньше, но только тогда, когда я забыл настроить метод для разрешения запросов POST.Я очень смущен тем, почему он делает это сейчас.

Также, как ни странно, если я клонирую запрос ajax, захваченный в Fiddler, я получаю следующее:заголовок, тело запроса отсутствует.

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Еще одна попытка - не устанавливать contentType в вашем $.ajax вызове и использовать dataType: "json" вместо.

$.ajax({
    type: "POST",
    url: url,
    dataType: "json",
    data: stuff,
    timeout: 10000,
    success: function (obj) { alert('yay!'); }
});
0 голосов
/ 26 августа 2010

Что произойдет, если вы попытаетесь использовать GET вместо POST?

Попробуйте очистить кэш или добавить метку времени в URL - код ответа 200, возможно, был кэширован браузером

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