Добрый день!
Пытаюсь обратиться к WCF сервису из javascript с помощью XmlHttpRequest.
Вот пример кода. Тут все просто:
var req = new XMLHttpRequest();
req.onreadystatechange = OnReadyState;
function Test() {
req.open('GET', 'http://localhost:87/helloto/olka', true);
req.send(null);
}
function OnReadyState()
{
if (req.readyState == 4)
{
if (req.status == 200)
{
alert(req.responseText);
}
}
}
Этот код работает только, если сервер и клиент расположены на одном домене. В javascript кросс-доменные запросы запрещены (по-крайней мере во всех браузерах, кроме IE). Мне же нужно делать именно кросс-доменные запросы. Есть технология, называется CORS, которая призвана решать ситуацию. Об этом стандарте можно почитать, к примеру, в
этой умной статье.
Вот я еще нарыла
такой пример. Здесь разрешают кросс-доменные запросы для WCF сервиса (конкретно последний листинг, вносятся соответствующие изменения в global.asax). Однако, мне это не подходит, так как здесь рассматривают WCF сервис, который хостится под IIS. А мой сервис надо чтоб, кровь из носу, был Self-Hosted (хостится либо как виндовый сервис, либо как консольное приложение), а значит ни о каком global.asax не может быть и речи.
То есть вопрос сформулирую так: как выполнить подобный код
private void EnableCrossDmainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin",
"http://localhost:5187");
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();
}
}
в Self-Hosted WCF сервисе? В приведенном примере он выполняется в обработчике Application_BeginRequest.
Да, вот еще нашла
пример именно для Self-Hosted, но это если клиент Silverlight. У меня же просто javascript XmlHttpRequest.
Буду крайне признательна за помощи, ибо перерыла уже все, что можно.