2012-12-11 66 views
0

这个问题比从Js调用Web方法稍微复杂一点。从Javascript调用ASP.NET 2.0 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。

我已经尝试了很多选择(谷歌并没有真正帮助这件事)传递引用到服务器和味精,但服务不断回复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

你以前http://encosia.com/using-complex-types-to-make-阅读本呼叫服务,不太复杂/? – Tariqulazam

+0

您可以添加JS请求代码的一些和平,以便我们可以确定问题吗? –

+0

是的,我没看过那篇文章,但没有帮助 –

回答

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

它在那里。我有使用System.Web.Script.Services;在源文件的顶部,在类定义处的[ScriptService],这与其他方法大同小异,因为所有其他方法都没有引用对象,从Js正常工作 –

1

尝试使用此代码:

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