この問題は、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 KError
、KServerInfo
および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 の型に対して定義されたパラメーターなしのコンストラクターがありません