0

この問題は、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)
        {
        ......
        }
}

where KErrorKServerInfoおよびKUserMessageは、文字列と int のみを含む単純なシリアル化可能なクラスです。

このサービスを .Net 環境で使用すると、複雑な型への参照を渡すのに問題はありませんが、Js からは機能しません。

serv と msg への参照を渡す多くのオプションを試しました (Google はこの問題についてはあまり役に立ちません) が、サービスは 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 の型に対して定義されたパラメーターなしのコンストラクターがありません

4

2 に答える 2

1

このコードを使用してみてください:

var jd = { version : 1, serv: app, msg: msg };
于 2013-07-02T11:57:06.347 に答える
-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)
    {
    ......
    }
}
于 2012-12-11T04:44:08.647 に答える