Я работал над сценарием JQuery, который отправляет JSON в мой веб-сервис asp.net. Если сценарий находится в том же домене, он обрабатывается правильно, но когда я пытаюсь запустить сценарий из локального файла или из альтернативного домена, это, кажется, не происходит на глаз! .. Хотя я заметил, что в моем веб-журнале регистрируется Попытка достигнуть сервера, но с методом OPTIONS, а не POST.
Я попытался установить следующие заголовки в IIS, непосредственно в web.config и в моем файле global.asax для события application_beginRequest, но пока безуспешно!
Access-Control-Allow-Origin *
Методы контроля доступа-разрешения GET, POST.
Мой файл global.asax содержит:
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, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers",
"Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age",
"1728000");
HttpContext.Current.Response.End();
}
}
Мой клиентский скрипт выглядит следующим образом:
$.ajax({
type: "POST",
crossDomain: true,
url: "http://myservice.mydomain.com/Data.asmx/Import",
data: "{\"AppSession\":" + JSON.stringify(session) + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
// Insert the returned HTML into the <div>.
$('#content').html(data.d);
},
error: function (j, t, e) {
$('#content').html(e);
}
});
Мой код веб-службы выглядит следующим образом ...
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
/// <summary>
/// Summary description for DataMgt
/// </summary>
[WebService(Namespace = "DataManagement")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class DataMgt : System.Web.Services.WebService {
public DataMgt () {
//Uncomment the following line if using designed components
//InitializeComponent();
}
public class GeoData
{
public string GEOLongitude { get; set; }
public string GEOLatitude { get; set; }
public string GEOAccuracy { get; set; }
public string GEOStatusID { get; set; }
}
public class AppSession
{
public GeoData GEOData { get; set; }
public string UserID { get; set; }
public string CountryID { get; set; }
}
[WebMethod]
public string ImportData(AppSession AppSession)
{
string strStatusCode;
try
{
//Do stuff here with requested data
strStatusCode = "SUCCESS";
}
catch (Exception ex)
{
strStatusCode = "FAILURE";
}
return strStatusCode;
}
}
Как я уже говорил ранее, это работает абсолютно нормально, когда клиентский скрипт выполняется в том же домене.
Сайт, на котором размещен мой сервис, работает на IIS 7 и ASP.NET 4.
Кто-нибудь подтверждал это при использовании аналогичной мне установки или кто-нибудь может подсказать, как решить эту проблему?
Заранее большое спасибо,
рит