すべての SOAP 要求と応答をログに記録するための SoapExtension があります。MS Soap Toolkit (OnBase ワークフロー) を使用したアプリケーションからの呼び出しでは問題なく動作します。ただし、html ページで $.ajax() によって行われた呼び出しでは機能しません。次に例を示します。
$.ajax({
type: "POST",
url: url,
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
});
WebService および ScriptService 属性でマークされた ASP.NET 3.5 WebService を呼び出しています。
[WebService(Namespace = XmlSerializationService.DefaultNamespace)]
[ScriptService]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class DepartmentAssigneeService : WebService
{
private readonly DepartmentAssigneeController _controller = new DepartmentAssigneeController();
/// <summary>
/// Fetches the role items.
/// </summary>
/// <returns></returns>
[WebMethod]
[SoapLog]
public ListItem[] FetchDepartmentItems()
{
return CreateListItems(_controller.FetchDepartments());
}
}
SoapExtension と SoapExtensionAttribute の基本は次のとおりです。
public class LoggingSoapExtension : SoapExtension, IDisposable { /*...*/ }
[AttributeUsage(AttributeTargets.Method)]
public sealed class SoapLogAttribute : SoapExtensionAttribute { /*...*/ }
$.ajax() リクエストで LoggingSoapExtension を実行できるようにする何かが欠けていますか?
アップデート
@クリス・ブランズマ
これは、Web サービス (dataType: "json") を介して XML ではなく Json の結果を要求していることが原因である可能性があります。したがって、ScriptService 属性はアクティブ化されていますが、SOAP メッセージは送信されていません。
これで、SoapExtension が機能しない理由がわかりました。ScriptService を使用したトレースに関する提案はありますか? 頭に浮かぶのは、リクエストをログに記録するメソッドを提供する ScriptService 基本クラスだけです。しかし、その後、すべての ScriptService WebService のすべての WebMethod でそのメソッドを呼び出す必要があります (私はかなりの数を持っています)。可能であれば、SoapExtension 属性のようにクリーンでシンプルなものを使用したいと考えています。