【问题标题】:Calling ASP.NET 2.0 web service from Javascript从 Javascript 调用 ASP.NET 2.0 Web 服务
【发布时间】:2012-12-11 02:04:43
【问题描述】:

这个问题比仅仅从 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 - Internal server error。错误描述说 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 类型定义无参数构造函数

【问题讨论】:

  • 你在encosia.com/…之前读过这篇文章吗?
  • 能否添加一些 JS 请求的和平代码以便我们识别问题?
  • 是的,我确实读过那篇文章,但没有帮助
  • 你为什么使用 ref 作为参数?

标签: c# javascript asp.net jquery asmx


【解决方案1】:

尝试使用此代码:

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

【讨论】:

    【解决方案2】:

    我认为要从 java-script 调用服务,您需要在上课之前使用这一行

     // 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)
        {
        ......
        }
    }
    

    【讨论】:

    • 它就在那里。我使用 System.Web.Script.Services;在源文件的顶部和类定义中的 [ScriptService],这几乎是相同的,因为所有其他没有引用对象的方法在 Js 中都可以正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多