У меня есть следующий 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, я получаю следующее:заголовок, тело запроса отсутствует.