【问题标题】:Calling c# asmx web service from Jquery with Response.Write JSON output使用 Response.Write JSON 输出从 Jquery 调用 c# asmx Web 服务
【发布时间】:2017-04-05 16:10:44
【问题描述】:

我有一个如下所示的 c# asmx Web 服务代码。

[WebMethod]
    [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public void getPolicyDetails(string CustId, string PolicyType)
    {
        JavaScriptSerializer js = new JavaScriptSerializer();
        Context.Response.Clear();
        Context.Response.ContentType = "application/json";
        clsPolicy data = new clsPolicy();
        try
        {
            string policyTxt = "";
            //get PolicyTxt from Database
            data.Message = policyTxt.ToString();
        }
        catch (Exception ex)
        {
        }
        Context.Response.Write(js.Serialize(data));
    }

现在,我正在尝试在 asp.net 中使用此 Web 服务。这个网络服务已经在我的安卓项目中成功使用了。

当我尝试通过 javascript 调用它时,它给了我一个 500 - 内部服务器错误。下面是我的 Javascript 代码。

 function getPolicy(policyType) {
            $.ajax({
                type: "POST",
                url: "http://myurl/productsearch.asmx/getPolicyDetails",
                data: '{CustId: 106206,PolicyType: "' + policyType + '" }',
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                }
            });
        }
        function OnSuccess(response) {
            alert(response.d);
        }

可能是什么问题?

【问题讨论】:

    标签: javascript c# asp.net web-services


    【解决方案1】:

    Error 500 Internal Server Error与webservice中的错误有关。

    调试/记录错误的不同方法

    1. 在 catch 块中,使用文件处理代码将该错误记录到文本文件中。

    2. 如果您有权访问部署服务的服务器并且在该服务器上安装了 Visual Studio,则通过将其附加到 w3wp 进程来调试您的 Web 服务。

    3. 您可以检查错误窗口事件查看器

      控制面板 -> 管理工具 -> 事件查看器

      在左侧面板上展开 Windows 日志并单击应用程序菜单并在与您的应用程序相关的错误日志中找到详细信息

    【讨论】:

      【解决方案2】:
      public void getPolicyDetails(string CustId, string PolicyType)
      

      您将 CustID 定义为字符串,但在您的 json 中它是整数

      data: '{CustId: 106206,PolicyType: "' + policyType + '" }'
      

      同时开始使用JSON.stringify 来创建您的数据。

      var policyType = 'something';
      var custID = '106206';
      data: JSON.stringify({CustId:custID, PolicyType: policyType })
      

      【讨论】:

      • 好的。让我试着用一个字符串回复你。
      • 修改代码:var custid = "106206";数据:'{CustId: "' + custid + '",PolicyType: "' + policyType + '" }'。
      • @milanm write 使用 JSON.stringify 就像我写的一样
      • 不幸的是,它仍然无法正常工作。同一页面上还有另一个 Web 服务,我没有传递参数,并且工作得非常好。我想知道这个有什么问题?
      猜你喜欢
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 2012-10-31
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多