У меня есть два OperationContracts в моей тестовой службе WCF, когда я тестирую его локально как CheckGet, так и CheckPost. Когда я вызываю их как на веб-сервере с веб-сервера, они оба работают, но когда я вызываю их с удаленного сервера с моей локальной машины, CheckGet работает, но CheckPost висит в окне браузера.GET работает, но POST не работает при вызове WCF из JQuery на удаленном сервере
Я все время пытался ударить головой о кирпичную стену, пытаясь понять, почему работает GET, но POST этого не делает. Если кто-нибудь может указать, где ошибка, я был бы благодарен.
[OperationContract]
[WebGet(UriTemplate = "oAuth/CheckGet")]
string CheckGet();
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "oAuth/CheckPost", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
string CheckPost();
Который просто возвращает основную строку
public string CheckGet()
{
return "Get is working";
}
public string CheckPost()
{
return "Post is working";
}
Я называю их так: -
function CheckGet() {
$.ajax({
cache: false,
type: "GET",
async: false,
url: serviceRoot + "CheckGet",
dataType: "json",
timeout: (5 * 1000),
success: function (message) {
alert("Service says - " + message);
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
function CheckPost() {
$.ajax({
cache: false,
type: "POST",
async: false,
url: serviceRoot + "CheckPost",
contentType: "application/json",
dataType: "json",
timeout: (5 * 1000),
success: function (message) {
alert("Service says - " + message);
},
error: function (xhr) {
alert(xhr.responseText);
}
});
}
Это в моей Global.asax файл
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(oAuth.Services.oAuth)));
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();
EnableCrossDmainAjaxCall();
}
private void EnableCrossDmainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
}
ОБНОВЛЕНИЕ
Это, кажется, что-то делать с файлом Global.asax.cs ...
если я закомментировать HttpContext.Current.Response.End(); то я, по крайней мере, получаю ответ, но если это так, Javascript зависает, и я получаю ошибку w3wp.exe на сервере.
Такая же проблема ... –