处理从客户端的WCF服务返回的null

时间:2017-10-31 06:31:34

标签: c# ajax wcf

我有WCF服务,我使用AJAX从我的网络应用程序调用服务方法。我的AJAX电话如下。

$.ajax({
            type: 'GET',
            url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById?id=' + value,
            dataType: 'json',
            processData: true,
            contentType: "application/javascript",
            success: function (data) {
                console.log(data);                    
            },
            failure: function (data) {
                console.log("Failed " + data);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
            }
        })

此调用用于实现搜索功能。 WCF服务包含以上调用的以下方法。

public Integration GetIntegrationById(string id)
{
    IntegrationList integrationList = new IntegrationList();
    Integration integration;
    integration = integrationList.CreateIntegrations().Where(i => id != null && i.IntegrationId == Convert.ToInt16(id)).FirstOrDefault();
    return integration;
}
下面给出的

CreateIntegrations()方法。(为测试目的而创建)

public Integration[] CreateIntegrations()
    {
        List<Integration> integrationList = new List<Integration>()
        {
            new Integration() { IntegrationId=1,... },
            new Integration() { IntegrationId=2, ... },
            new Integration() { IntegrationId=3, ... },
            new Integration() { IntegrationId=4, ... },
            new Integration() { IntegrationId=5, ... }
        };
        Integrations = integrationList;
        return integrationList.ToArray();
    }

现在,当我在搜索文本框中输入1-5之间的值时,我得到了相应的Integration对象。但是,当我输入上面列表中没有的内容时,例如,id = 8,正如预期的那样,整合的值为null,从web方法返回。这导致客户端上的解析器错误,因为它期望JSON值并且接收它无法解析的null。所以我把最后一行改为

return integration ?? new Integration();

这样做是希望在客户端接收非空值。但是,这会因以下错误而失败。

GET http://localhost:56083/Service1.svc/Web/GetIntegrationById?id=8 net::ERR_CONNECTION_RESET

我可能在这里做了大量的事情但是我需要知道如何从service方法返回时管理/处理null值。如果不是,我如何处理所请求项目不存在的情况?任何帮助赞赏。感谢。

1 个答案:

答案 0 :(得分:0)

这里的问题是当你给出正确或预期的输入时,会返回成功的响应,即积分变量包含js理解的已知值。但是对于错误的输入反序列化失败,因为来自服务的返回值为空并因此失败。

假设客户端html中的$(&#39;#id&#39;)。val()保存您的输入ID值。

  $.ajax({
                type: 'Post',
                url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById',
                data: JSON.stringify({ id: $('#id').val() }),
                dataType: 'json',
                processData: true,
                contentType: "application/json;charset=utf-8",
                success: function (data) {
                    console.log(data);                    
                },
                failure: function (data) {
                    console.log("Failed " + data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
                }
            })

由于它是一个模拟服务,建议你创建Integration的类对象并适当调整。我相信,如果你在.net应用程序中调用GetIntegrationById方法,它将失败,因为集成对象将为null但是因为它是一个JS打电话,它在js控制台中默默地失败。

Integration integration=new Integration();