向客户端应用程序中添加 SOAP 跟踪支持

后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

在为 SQL Server 本机 XML Web 服务开发 Web 客户端应用程序时,跟踪和观察在 SQL Server 实例与客户端应用程序之间交换的 SOAP 消息的功能是排除故障的有利工具。

本主题主要介绍了用于实现 SOAP 扩展插件头的一个示例类库,这些扩展插件头支持在 Visual Studio 2005 中对客户端应用程序项目进行 SOAP 跟踪。当与项目集成后,这些扩展插件将跟踪并显示 SOAP 请求和响应消息的实际内容。

此库可以添加到现有的 Visual Studio 2005 SOAP 客户端项目。这包括发送本机 HTTP SOAP 请求的示例应用程序中提供的示例应用程序。建议您首先熟悉设置服务器以侦听本机 XML Web 服务请求编写客户端应用程序中提供的概念和过程信息。

另外,如果您不熟悉 SOAP 消息的格式,请参阅下列主题:

注意注意

以下过程假定您已通过使用 Visual Studio 2005 创建现有 SOAP 客户端应用程序,并已添加对使用 SQL Server 创建的 HTTP SOAP 端点的 Web 引用,如使用 Visual Studio 2005 客户端发送 SOAP 请求 (C#) 中所示。

向 Visual Studio 项目中添加 SOAP 跟踪示例库

  1. 使用记事本复制和粘贴为 SQL SOAP 跟踪示例类库列出的 C# 代码中的内容,并以名称 SqlSoapTracer.cs 将其保存在包含 SOAP 客户端项目文件的文件夹中。

  2. 在客户端计算机上,从 Microsoft Visual Studio 2005 程序组启动 Microsoft Visual Studio 2005。

  3. 单击**“打开项目”**。

  4. 浏览并选择 SOAP 客户端项目 (.csproj) 文件。

  5. 在“解决方案资源管理器”窗口中,执行下列步骤:

    1. 按名称选择项目,单击右键并指向**“添加”,再选择“添加现有项”**。

    2. 在**“添加现有项”**对话框中,从在步骤 1 中保存 SqlSoapTracer.cs 文件的位置浏览并选择该文件。

    3. 选择**“显示所有文件”并展开“Web 引用”**节点,然后选择 Reference.cs 文件。

  6. 在代码编辑器窗口中,通过定位该窗口中的 Web 方法入口点来更新 Reference.cs 文件。

    例如,如果向使用 Visual Studio 2005 客户端发送 SOAP 请求 (C#) 中提供的示例项目中添加 SOAP 跟踪支持,该项目中包括的各种已发布的 Web 方法入口点将显示如下:

    public object[] GetCustomerInfo([System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] System.Data.SqlTypes.SqlString CustomerID, [System.Xml.Serialization.XmlElementAttribute(IsNullable=true)] ref System.Data.SqlTypes.SqlString OutputParam) {
                object[] results = this.Invoke("s2MsgGetCustomerInfoSoapIn", new object[] {
                            CustomerID,
                            OutputParam});
                OutputParam = ((System.Data.SqlTypes.SqlString)(results[1]));
                return ((object[])(results[0]));
            }
    
    ...
    
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {
                object[] results = this.Invoke("s1MsgUDFReturningAScalarSoapIn", new object[0]);
                return ((System.Data.SqlTypes.SqlInt32)(results[0]));
            }
    
  7. 若要当 Web 方法在客户端代码中执行时添加 SOAP 跟踪支持,请在要跟踪的每个 Web 方法入口点前的 Reference.cs 代码中添加以下 snoopattribute() 调用,如下列代码行所示。

    [snoopattribute()]
    public object[] GetCustomerInfo(...) {...}
    ...
    [snoopattribute()]
    public System.Data.SqlTypes.SqlInt32 UDFReturningAScalar() {...}
    

    这将注册一个 SOAP 扩展插件,该扩展插件用于在执行 Web 方法时调用这些方法的 SOAP 跟踪。

使用 SOAP 跟踪支持测试应用程序

在 Visual Studio 开发环境中运行 SOAP 客户端应用程序时,若要使用上述代码提供的 SOAP 跟踪支持扩展插件,必须完成下列步骤:

  1. 通过使用 SQL Server Management Studio 或 osql 命令实用工具添加一个 Web 方法,以显示要在端点上测试的存储过程或用户定义函数。

    有关详细信息,请参阅向 Web 公开 SQL 可编程性

  2. 在 Visual Studio 中,编码、调试并生成 SOAP 客户端应用程序项目(如果尚未执行此操作)。

    或者,也可利用使用 Visual Studio 2005 客户端发送 SOAP 请求 (C#) 中提供的示例项目。

  3. SqlSoapTracer.cs 类添加到上一步骤中生成的项目。

  4. 在 Visual Studio 开发环境中保存、生成并运行客户端应用程序。

    通过运行应用程序,将会创建 Windows 剪贴板查看器对象。当执行您在步骤 3 中为其启用跟踪的 Web 方法时,此查看器对象将显示有关每个 Web 方法的以下内容:

    • 由客户端代码生成的 SOAP 客户端请求消息。

    • 由 SQL Server 的本机 XML Web 服务返回的 SOAP 服务器响应消息。

    若要在发生跟踪活动后查看剪贴板的内容,可以将当前 Windows 剪贴板上的内容粘贴到记事本中。

SOAP 跟踪支持的工作方式

跟踪机制使用预定义的、影响 SQL Server 本机 XML Web 服务的实现方式的回调和事件。其中包括两个事件:BeforeSerialize 和 AfterSerialize。

通过这些事件和回调可以捕捉 SOAP 请求及其相应的来自服务器的 SOAP 响应,并将它们重定向到一个输出流。在提供的代码中,输出被重定向到 System.Windows.Forms.Clipboard 对象。Clipboard 对象可接收并显示 SOAP 客户端请求和服务器响应消息,它们是通过执行紧跟在 snoopattribute() 调用后面的 Web 方法来交换的。

客户端请求的输出和 SQL Server 发出的对该输出的响应将以类似于 SOAP 请求消息结构SOAP 响应消息结构的格式显示。在响应中,还将显示由服务器生成的任何结果,例如,序列化 XML 输出(如果 Web 方法成功执行)。在出现错误的情况下,将在由服务器返回的响应中显示 SOAP 错误消息结构而不是序列化 XML 输出。