contentType = "application/x-www-form-urlencoded; charset=utf-8" の場合、jQuery を使用して Web サービスを呼び出すことができます。
ただし、これは xml を返します。<string>[myjson]</string>
「application/json; charset=utf-8」を使用してサービスに POST しようとすると、StackTrace と ExceptionType が空の 500 エラーが発生します。私の Web サービス関数は決してヒットしないので、この状況をデバッグする方法がよくわかりません。
私のメソッドとクラスは適切な属性で装飾されており、JSON を応答タイプとして使用するように設定されています (wsdl ファイルと disco ファイルと同様)。Ajax 拡張機能がインストールされており、web.config に必要なエントリがあります。
これは SharePoint ファーム上にありますが、それほど大きな違いがあるかどうかはわかりません。すべての WFE に web.config の変更を展開し、ajax 拡張機能をインストールしました。ここでもサービスは機能しますが、デフォルトのコンテンツ タイプ以外は受け入れません。
ここで何が欠けているのかわからない、仲間...
私のajax呼び出し:
$.ajax({
type: "POST",
url: "/_vti_bin/calendar.asmx/Test",
dataType: "json",
data: "{}",
contentType: "application/json; charset=UTF-8",
success: function(msg){
alert(msg);
},
error: function(xhr, msg){ alert(msg + '\n' + xhr.responseText); }
});
私のWebサービスクラス:
[WebService(Namespace = "http://namespace")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public class CalendarService : WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string Test()
{
return "Hello World";
}
}