我有一个旨在记录所有 SOAP 请求和响应的 SoapExtension。它适用于使用 MS Soap Toolkit (OnBase Workflow) 的应用程序调用。但它不适用于由 $.ajax() 在 html 页面上进行的调用。这是一个例子:
$.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 { /*...*/ }
我是否遗漏了允许 LoggingSoapExtension 在 $.ajax() 请求上执行的内容?
更新
@克里斯布兰兹玛
这可能是因为您通过 Web 服务(数据类型:“json”)请求 Json 结果而不是 XML。因此 ScriptService 属性被激活,但您没有发送 SOAP 消息。
这回答了为什么 SoapExtension 不起作用。对使用 ScriptService 进行跟踪有什么建议吗?唯一想到的是 ScriptService 基类,它提供了一种记录请求的方法。但是我必须在每个 ScriptService WebService 中的每个 WebMethod 中调用该方法(我有很多)。如果可能的话,我想使用像 SoapExtension 属性一样干净简单的东西。