ASP.NET - 从用户控件调用Web服务(.Ascx)返回错误500内部服务器错误

时间:2011-12-13 17:32:06

标签: asp.net web-services internal-server-error

所以我有一些问题。问题的目标是,当我尝试使用Ajax从用户控件调用Web服务时,我得到了500个内部服务器错误。

有我的代码示例:

网络服务.CS

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class BudgetJson : System.Web.Services.WebService {

    public BudgetJson () 
    {
    }



    [WebMethod]
    public static String GetRecordJson()
    {
        return " Hello Master, I'm Json Data ";
    }
}

用户控制(.Ascx)文件(Ajax调用)

$(document).ready(function () {
            $.ajax({
                type: "POST",
                url: "BudgetJson.asmx",
                data: "{}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) 
                {
                    alert(msg);
                }
            });
        });

因此,当发送页面加载和请求时,我得到了这样的响应:

  

soap:ReceiverSystem.Web.Services.Protocols.SoapException:服务器是   无法处理请求。 ---> System.Xml.XmlException:数据在   根级别无效。第1行,第1位   System.Xml.XmlTextReaderImpl.Throw(Exception e)at   System.Xml.XmlTextReaderImpl.Throw(String res,String arg)at   System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace()at   System.Xml.XmlTextReaderImpl.ParseDocumentContent()at   System.Xml.XmlTextReaderImpl.Read()at   System.Xml.XmlTextReader.Read()at   System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.Read()   在System.Xml.XmlReader.MoveToContent()处   System.Web.Services.Protocols.SoapServerProtocol.SoapEnvelopeReader.MoveToContent()   在   System.Web.Services.Protocols.SoapServerProtocolHelper.GetRequestElement()   在   System.Web.Services.Protocols.Soap12ServerProtocolHelper.RouteRequest()   在   System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage   消息)   System.Web.Services.Protocols.SoapServerProtocol.Initialize()at   System.Web.Services.Protocols.ServerProtocol.SetContext(Type type,   HttpContext上下文,HttpRequest请求,HttpResponse响应)   System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type,   HttpContext上下文,HttpRequest请求,HttpResponse响应,   布尔和放大器; abortProcessing)---内部异常堆栈的结束   追踪---

如果我将方法名称添加到url,我收到了这样的错误:

  

未知的网络方法GetRecordJson。参数名称:methodName   描述:执行期间发生未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.ArgumentException:未知的Web方法   GetRecordJson。参数名称:methodName

任何解决方案?

1 个答案:

答案 0 :(得分:2)

服务器端的一些事情:

该方法不应该是静态的。这只是ASPX页面上“页面方法”的情况。

其次,您需要使用[ScriptService]属性来装饰服务类,以便能够在JSON中与它进行通信,我假设您可能希望这样做,因为您正在使用jQuery。

[ScriptService]
public class BudgetJson : System.Web.Services.WebService {
  [WebMethod]
  public String GetRecordJson()
  {
    return " Hello Master, I'm Json Data ";
  }
}

在客户端,您需要在$.ajax()网址中指定要执行的方法:

$.ajax({
  type: "POST",
  url: "BudgetJson.asmx/GetRecordJson",
  data: "{}",
  // The charset and dataType aren't necessary.
  contentType: "application/json",
  success: function (msg) {
    alert(msg);
  }
});

您还可以简化$.ajax()使用情况,如上所示。从服务器发回的标题中的charset isn't necessary and jQuery automatically detects the dataType