从Javascript调用ASP.NET 2.0 Web服务

时间:2012-12-11 02:04:43

标签: c# javascript asp.net jquery asmx

这个问题比从Js调用Web方法要复杂一点。

这是我在ASP.Net上获得的代码:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class WebService : System.Web.Services.WebService
{
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
        public KError GetAppServer(int version, ref KServerInfo serv, ref KUserMessage msg)
        {
        ......
        }
}

KErrorKServerInfoKUserMessage是简单的可序列化类,其中只包含字符串和整数。

在.Net环境中使用此服务时,传递对复杂类型的引用没有问题,但它不适用于Js。

我已经尝试了很多选项(谷歌在这个问题上没有真正的帮助)传递对serv和msg的引用,但是服务一直在回复500 - 内部服务器错误。错误描述表明ASP.Net无法从json数据中实例化serv和msg。

这是我的Js部分:

var app = {
          version : 1,
          SessionID : "''",
          Path : "''",
          Login : "''",
          Pwd : "''",
          UserID : 0
          };
var jd = { version : 1, 'appSrv': app, 'msg': msg };
$.ajax({
              type: "POST",
              contentType: "application/json; charset=utf-8",
              url: "http://localhost:3965/api.asmx/GetAppServer",
              data: JSON.stringify(jd),
              //data: JSON.stringify(jd),
              dataType: "json",
              success: AjaxSucceeded,
              error: AjaxFailed
          });

这是我从服务器获得的确切错误:

没有为\ u0027API.code.KServerInfo& \ u0027

的类型定义无参数构造函数

2 个答案:

答案 0 :(得分:1)

尝试使用此代码:

var jd = { version : 1, serv: app, msg: msg };

答案 1 :(得分:-2)

我想从java脚本调用一个服务,你需要在你的课程

之前使用这一行
 // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
 [System.Web.Script.Services.ScriptService]

所以你的代码应该是这样的

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Xml)]
    public KError GetAppServer(int version, ref KServerInfo serv, ref KUserMessage msg)
    {
    ......
    }
}