How to enable CORS in Self-Hosted WCF Service
От: hippos2011  
Дата: 20.01.11 08:07
Оценка:
Добрый день!

Пытаюсь обратиться к 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.

Буду крайне признательна за помощи, ибо перерыла уже все, что можно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.