1

我有一个使用 JSON 的 WCF REST 样式服务,它在 IE 中运行良好,但 FireFox 和 Chrome 正在发脾气;关于跨域调用的一些东西。

我在这里遵循了建议: 将 JSON 数据从 JQuery 发送到 WCF REST 方法时出现问题

但是我现在看到的是,虽然我的浏览器发送了 2 个请求(首先是 OPTIONS,然后是 POST),但 POST 请求根本没有返回任何内容。再次,IE 与此完美配合。少了什么东西?

在此处输入图像描述

JAVASCRIPT

<script type="text/javascript">
    function Search() {

        var json = JSON.stringify($('#testForm').serializeObject());

        $.ajax(
        {
            type: "POST",
            url: "http://localhost:8000/MyService.svc/Search",
            data: json,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response, status, xhr) {
                GetResults(response.SearchResult.QueryId);
            },
            error: function (xhr, status, error) {
                alert("Error\n-----\n" + xhr.status + '\n' + xhr.responseText);
            },
            //complete: function (jqXHR, status) { alert('Status: ' + status + '\njqXHR: ' + JSON.stringify(jqXHR)); }
        });

        return false;
    }

    function GetResults(queryId) {
        debugger;
        $.ajax(
        {
            type: "GET",
            url: "http://localhost:8000/MyService.svc/GetResults?queryId=" + queryId + "&ignoreXmlFeedSourceIds=",
            //data: {},
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            success: function (response, status, xhr) {
                debugger;
                DoSomethingWithResults(response);
            },
            error: function (xhr, status, error) {
                alert(error);
            },
            complete: function (jqXHR, status) { alert('Status: ' + status + '\njqXHR: ' + JSON.stringify(jqXHR)); }
        });
    }

    function DoSomethingWithResults(results) {
        alert("In DoSomethingWithResults()");
        // process the results here to show on UI
        debugger;
    };

    $.fn.serializeObject = function () {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function () {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

</script>

服务合同

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/Search")]
    SearchResponse Search(RequestInfo requestInfo);

    [OperationContract]
    [WebInvoke(Method = "OPTIONS", UriTemplate = "/Search")]
    void SearchAllowCors();

    [OperationContract]
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetResults?queryId={queryId}&ignoreXmlFeedSourceIds={ignoreXmlFeedSourceIds}")]
    IList<FlightJourneyAvailabilityResponse> GetResults(string queryId, string ignoreXmlFeedSourceIds);
}
4

1 回答 1

0

在使 WCF 与 JSON/REST 一起正常工作时,我遇到了许多问题。因此,我了解了新的 ASP.NET Web API,这使得这变得更加简单。对于任何新的 Web 服务,我可能会使用它而不是 WCF。

于 2013-09-11T00:16:46.473 回答