繁体   English   中英

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

[英]Handle null returned from a WCF service on the client-side

我有WCF服务,正在使用AJAX从Web应用程序中调用服务方法。 我的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

我可能在这里做很多错误的事情,但是我需要知道从服务方法返回时如何管理/处理空值。 如果没有,我该如何处理不存在所请求项目的情况? 任何帮助表示赞赏。 谢谢。

这里的问题是当您提供正确或预期的输入时,将返回成功的响应,即积分变量具有js可以理解的已知值。 但是对于错误的输入,反序列化失败,因为服务的返回值为null,因此失败。

假设客户端html中的$('#id')。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方法,则该操作将失败,因为Integration对象将为null,但由于它是一个JS调用,因此在js控制台中静默失败。

Integration integration=new Integration();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM