Отправка данных в сервис ServiceStack RESTful, получение «Доступ запрещен»

Я создал сервис RESTful с ServiceStack, который отправляет данные в базу данных. Я проверил это локально, и он прекрасно работает. Когда я развертываю его на сервере и запускаю тот же код, который является вызовом jQuery $ .ajax, я получаю ошибку «Отказано в доступе». Я установил CORS в моей конфигурации ServiceStack, используя плагин какобъяснил здесь, Я также установил для crossDomain значение true в своем вызове ajax. Я не могу думать о том, что еще нужно сделать, чтобы заставить это работать, и я честно не уверен, куда эта ошибка выдается. Я прошел через Javascript, и он даже не доходит до блока «сбоя» вызова ajax, ошибка выдается до этого ... Я использую IE9 для проверки, если это уместно ...?

Есть идеи, что может происходить?

Вот мой метод POST ServiceStack:

    public CitationResponse Post(Citation citation)
    {
        var response = new CitationResponse { Accepted = false };

        if (string.IsNullOrEmpty(citation.ReportNumber))
        {
            response.Accepted = false;
            response.Message = "No data sent to service.  Please enter data in first.";
            return response;
        }

        try
        {
            response.ActivityId = Repository.CreateCitation(citation.ReportNumber, citation.ReportNumber_Prefix, citation.ViolationDateTime, citation.AgencyId, citation.Status);
            response.Accepted = true;
        }
        catch (Exception ex)
        {
            response.Accepted = false;
            response.Message = ex.Message;
            response.RmsException = ex;
        }

        return response;
    }

Вот моя функция Javascript, которая вызывает веб-сервис:

   SendCitationToDb: function(citation, callback) {
        $.ajax({
            type: "POST",
            url: Citations.ServiceUrl + "/citations",
            data: JSON.stringify(citation),
            crossDomain: true,
            contentType: "application/json",
            dataType: "json",
            success: function (data) {
                if (!data.Accepted) {
 ,                   Citations.ShowMessage('Citation not added', 'Citation not added to database.  Error was: ' + data.Message, 'error');
                } else {
                    citation.ActivityId = data.ActivityId;
                    callback(data);
                }
            },
            failure: function(errMsg) {
                Citations.ShowMessage('Citation not added', 'Citation not added to database.  Error was: ' + errMsg.Message, 'error');
            }
        });
    }

Спасибо за вашу помощь!

Обновить: Я только что запустил то же самое приложение в Chrome 29, и я получаю эти ошибки (заменил реальные URL для безопасности):

OPTIONS http://servicedomain.com/citations Origin http://callingdomain.com is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load http://servicedomain.com//citations. Origin http://callingdomain.com is not allowed by Access-Control-Allow-Origin.

Но я явно разрешаю все домены в моих заголовках:

            Plugins.Add(new CorsFeature()); //Enable CORS

            SetConfig(new EndpointHostConfig {
                DebugMode = true, 
                AllowJsonpRequests = true,
                WriteErrorsToResponse = true,
                GlobalResponseHeaders =
                {
                    { "Access-Control-Allow-Origin", "*" },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" }
                }
            });

СЕЙЧАС, если я выполню тот же сервисный вызов черезКонсольное приложение REST в Chrome я получаю правильный ответ от ServiceStack. Вот заголовок ответа:

Status Code: 200
Date: Fri, 20 Sep 2013 19:54:26 GMT
Server: Microsoft-IIS/6.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET, ServiceStack/3.948 Win32NT/.NET
Access-Control-Allow-Methods: POST,GET,OPTIONS, GET, POST, PUT, DELETE, OPTIONS
Content-Type: application/json; charset=utf-8
Access-Control-Allow-Origin: *, *
Cache-Control: private
Content-Length: 58

Так что я совершенно заблудился относительно того, почему он работает в чистом запросе REST, а не из приложения ??

Обновить:

Потратив много часов, пытаясь найти много разных решений, которые я нашел в Интернете, мой метод Configure теперь выглядит следующим образом:

        public override void Configure(Container container)
        {
            SetConfig(new EndpointHostConfig
            {
                DefaultContentType = ContentType.Json,
                ReturnsInnerException = true,
                DebugMode = true, //Show StackTraces for easier debugging (default auto inferred by Debug/Release builds)
                AllowJsonpRequests = true,
                ServiceName = "SSD Citations Web Service",
                WsdlServiceNamespace = "http://www.servicestack.net/types",
                WriteErrorsToResponse = true,
                GlobalResponseHeaders = 
                { 
                    { "Access-Control-Allow-Origin", "*" },
                    { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" }
                }
            });

            container.RegisterAutoWired<Citation>();
            container.RegisterAutoWired<Driver>();
            container.RegisterAutoWired<Vehicle>();
            container.RegisterAutoWired<Violations>();

            using (var getAttributes = container.Resolve<AttributesService>())
                getAttributes.Get(new AttributesQuery());

            Plugins.Add(new CorsFeature());
            RequestFilters.Add((httpReq, httpRes, requestDto) =>
            {
                httpRes.AddHeader("Access-Control-Allow-Origin", "*");
                httpRes.AddHeader("Access-Control-Allow-Methods", "POST, GET, DELETE, OPTIONS");
                httpRes.AddHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");

                if (httpReq.HttpMethod == "OPTIONS")
                    httpRes.EndServiceStackRequest(); //   extension method
            });

            Routes
              .Add<Attribute>("/attributes", "GET, OPTIONS")
              .Add<Citation>("/citations", "POST, GET, OPTIONS, DELETE")
              .Add<Driver>("/driver", "POST, OPTIONS")
              .Add<Vehicle>("/vehicle", "POST, OPTIONS")
              .Add<Violations>("/violations", "POST, OPTIONS");

            var config = new AppConfig(new ConfigurationResourceManager());
            container.Register(config);
        }
    }

На данный момент я не уверен, что делать. Я перепробовал все, но все равно получаю те же ошибки. Методы продолжаютработать нормально использование консоли REST в Chrome, что немного раздражает, так как я никогда не могу заставить их работать, вызывая их с веб-страницы. Я почти готов переписать все это в WCF, но мне бы очень хотелось, чтобы версия ServiceStack работала, так как язнать это работает локально! Если у кого-то есть какие-либо другие предложения, которые я могу попробовать, я буду очень признателен за вашу помощь!

Обновить: Смотрите комментарий внизу для деталей. Мне пришлось удалить заголовки из вкладки HTTP Headers в IIS. Не уверен, когда я добавлю их, но для тех, кто может столкнуться с той же проблемой, вот скриншот вкладки в IIS:

Ответы на вопрос(1)

Ваш ответ на вопрос