Не удается завершить вызов JSONP из jQuery в WCF - PullRequest
1 голос
/ 22 июля 2009

Хорошо, я пытаюсь (плохо) успешно выполнить вызов JSONP из jQuery на тестовой странице в веб-службу WCF, работающую локально, как междоменный вызов. В тот или иной момент я либо получил ошибку отказа в URI 1012, либо получил ответ, но в Xml, либо просто не получил ответа вообще. В настоящее время, как я настроил, он выплевывает 1012.

Я не писал этот веб-сервис, поэтому вполне возможно, что мне просто не хватает параметра конфигурации где-то , но я настолько разочаровался этим, что думаю, что просто спросить здесь будет более продуктивно Спасибо, парни. Подробности ниже.

У меня есть веб-сервис WCF со следующим методом:

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public decimal GetOrderStatusJson(int jobId)

Я пытаюсь вызвать этот метод с тестовой страницы jQuery через междоменный вызов JSONP.

<script type="text/javascript">
    getJsonAjaxObject(
    "http://localhost:3960/ProcessRequests.svc/json/GetOrderStatusJson",
    { "jobId": 232 });


    function getJsonAjaxObject(webServiceUrl, jsonData) {
        var request = {
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: webServiceUrl,
            data: jsonData,
            dataType: "jsonp",
            success: function(msg) {
                //success!
                alert("blah");
            },
            error: function() {
                //oh nos
                alert("bad blah");
            }
        };


        $.ajax(request);
    }
</script>

Ниже приведены фрагменты файла web.config, который я настраиваю для этой цели:

<services>
    <service behaviorConfiguration="MWProcessRequestWCF.ProcessRequestsBehavior"
     name="MWProcessRequestWCF.ProcessRequests">
        <endpoint address="json" behaviorConfiguration="AspNetAjaxBehavior"
         binding="webHttpBinding" contract="MWProcessRequestWCF.IProcessRequests" />
        <endpoint address="" binding="wsHttpBinding" contract="MWProcessRequestWCF.IProcessRequests">
            <identity>
                <dns value="localhost" />
            </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="MWProcessRequestWCF.ProcessRequestsBehavior">
            <serviceMetadata httpGetEnabled="true"/>
            <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
        <behavior name="AspNetAjaxBehavior">
            <enableWebScript/>
        </behavior>
    </endpointBehaviors>
</behaviors>

Ответы [ 2 ]

4 голосов
/ 22 июля 2009

Чтобы заставить JSONP работать с jQuery, вам нужно указать свой обратный вызов следующим образом:

"myurl? Обратного =?" (документация jquery здесь )

Кроме того, веб-сервису необходимо обернуть свой ответ вызовом javascript. Пример: ServiceName.svc / MethodName? Jscallback = mycallback

вернется

mycallback (JSON STRING);

Когда мне пришлось реализовать что-то подобное, я написал HttpModule, который будет наблюдать входящие запросы на ключ строки запроса "jscallback". Если обратный вызов был указан в строке запроса, то HttpModule прикрепил бы специальный фильтр ответа для «обтекания» json, как показано выше.

0 голосов
/ 22 июля 2009

[ScriptMethod] для веб-служб ASMX, а не для WCF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...