0

我有一个通过 jquery 调用的启用了 WCF Ajax 的 Web 服务。当我只返回一个字符串对其进行测试时,它返回正常。一旦我添加了更多功能,javascript 错误回调就会在没有有用数据的情况下运行。只是说'错误',readystate = 0,status = 0。

我可以单步执行服务代码,它会成功返回一个对象数组。然而,客户没有。

这是代码。

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebAPI
{
    [OperationContract]
    [WebGet(ResponseFormat=WebMessageFormat.Json)]
    public Person[] GetPeople(Guid groupId)
    {
        using (SchedulerContext context = new SchedulerContext())
        {
            return context.People.Where(p=>p.Group_ID==groupId).ToArray();
        }
    }
}

在客户端:

<script type="text/javascript">
    $(document).ready(function () {
        $.ajax(
                {
                    type: "GET",
                    dataType: "json",
                    contentType: "json",
                    data: { groupId: 'ae09a080-5d7c-4e92-9a87-591574b7c4b8' },
                    url: "WebAPI.svc/GetPeople",
                    error: function (error) {
                        alert("error");
                    },
                    success: function (msg) {
                        alert(msg.d);
                    }
                }

        );
    });
</script>

更新: 用提琴手检查它,http结果是504,在“原始”响应选项卡中有以下内容:

HTTP/1.1 504 Fiddler - Receive Failure
Content-Type: text/html; charset=UTF-8
Connection: close
Timestamp: 13:52:46.107

[Fiddler] ReadResponse() failed: The server did not return a response for this request.

更新 - 2012/05/04:( 顺便说一句,大家星球大战日快乐!) 我发现问题出在 JSON 序列化中。它在我的实体模型上给出了循环引用异常。仍在研究解决方案。

4

2 回答 2

0

您可以将您的服务方法定义修改为以下内容:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class WebAPI
{
    [OperationContract]
    [WebGet(UriTemplate="GetPeople/{groupId}",ResponseFormat=WebMessageFormat.Json)]
    public Person[] GetPeople(Guid groupId)
    {
        using (SchedulerContext context = new SchedulerContext())
        {
            return context.People.Where(p=>p.Group_ID==groupId).ToArray();
        }
    }
}

现在执行来自 Fiddler 的 GET 请求,请求如下:

GET http://localhost:15006/WebAPI.svc/GetPeople/739526F1-7C58-4E3B-97D8-4870948BFE32 HTTP/1.1
Content-Type: application/json
User-Agent: localhost

现在尝试从您的 jquery 调用中执行相同的操作,并查看请求的外观。

于 2012-05-04T13:28:39.883 回答
0

你可以做一些事情来调试这个问题:

  • 在服务器上启用跟踪。如果它返回错误响应,它应该在跟踪中包含一些信息来解释发生了什么问题
  • 使用一些网络捕获工具,例如 Fiddler,或大多数浏览器中的开发人员工具(按 F12 访问它们,然后转到网络选项卡)。通过捕获实际响应,您可以查看响应是否包含一些附加信息来帮助您解决问题。
  • $.ajax调用的错误函数中使用额外的参数。错误回调采用 3 个参数(jqXHR、textStatus、errorThrown),您可以查询 jqXHR 的statusresponseText属性,这应该会为您提供有关错误的更多信息。
于 2012-05-04T00:40:00.780 回答