以前の "ASMX" Web サービス実装を使用してかなり複雑なアプリを作成しましたが、WCF に移行しています。私を夢中にさせていることが 1 つあります。簡単なはずですが、この呼び出しをどのように構成しようとしても、AJAX 呼び出しでエラーが発生します。これは、ASMX 呼び出しでは正常に機能しましたが、WCF では機能しませんでした。
AJAX 呼び出しは次のとおりです。
var ProfileData = new Object();
ProfileData.SUID = SUID;
ProfileData.FirstName = $("#FirstName").val();
ProfileData.LastName = $("#LastName").val();
ProfileData.Birthdate = new Date($("#Birthdate").val());
var DTO = {'ProfileData': ProfileData };
$.ajax({
type: "POST",
url: "AllianceService.svc/SaveBasicProfile",
data: JSON.stringify(DTO),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
UpdateTips($("#BasicProfileValidate"), "Success! Your data has been updated.");
}
},
error: function (xhr, ajaxOptions, thrownError, request, error) {
alert('Error Saving Basic Profile Data');
}
});
C#/サーバー側での型の宣言は次のとおりです。
[DataContract]
public class BasicFolderData
{
[DataMember]
public string SUID { get; set; }
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
[DataMember]
public DateTime Birthdate { get; set; }
}
サービスの定義は次のとおりです。
[OperationContract]
public int SaveBasicProfile(BasicFolderData ProfileData)
{
... do stuff
}
ここで、すべてのデータメンバーを分割してパラメーターとして使用すると、これを単純な方法で機能させることができます
data: JSON.stringify(ProfileData)
しかし、オブジェクトは実際にはこれよりもずっと長いので、オブジェクトを渡す方法を知りたいです。
また、私は試しました:
data: JSON.stringify({"ProfileData": ProfileData }),
と
data: JSON.stringify('{"ProfileData":' + ProfileData + '}'),
と
data: '{"ProfileData":' + JSON.stringify(ProfileData) + '}',
しかし、すべて役に立ちません...それらすべてでエラーメッセージが表示されます。
私が使用する場合:
data: JSON.stringify(ProfileData),
次に、奇妙なことに、要求はサーバーに送信されますが、ProfileData パラメーターは null です。問題はデータ契約にあると思われますが、どこから始めればよいかわかりません。また、問題なく動作するスカラー パラメータを持つ多くの関数があります。失敗するのは、オブジェクトを渡そうとしたときだけです。どんな助けでも大歓迎です!!
DonAndre の提案に従って、パラメーターをスカラー型に変更するだけで呼び出しが成功することがわかりました。ただし、パラメーターは常に null です。