将 ServiceModel 元数据实用工具与 Oracle 数据库的 BizTalk 适配器配合使用

可以使用 ServiceModel 元数据实用工具 (svcutil.exe) 生成 WCF 客户端类或 WCF 服务协定, (接口) 用于 Oracle 数据库的 Microsoft BizTalk 适配器公开的操作。 运行 svcutil.exe 以生成 WCF 客户端类或 WCF 服务协定后,可以在代码中包含生成的文件并创建生成的类的实例,或者从协定实现 WCF 服务,以对 Oracle 数据库执行操作。

使用 svcutil.exe 需要提供包含凭据的连接 URI。 由于 Oracle 数据库适配器默认禁用连接 URI 中的凭据,因此必须将 svcutil.exe 配置为对 Oracle 数据库适配器使用非默认绑定。

以下部分介绍如何配置 svcutil.exe,以及如何使用 svcutil.exe 通过 Oracle 数据库适配器生成 WCF 客户端代码或 WCF 服务协定。

为非默认绑定配置 svcutil.exe

若要将 svcutil.exe 配置为使用非默认绑定,必须创建 svcutil.exe 的本地副本,然后创建或修改 svcutil.exe.config 配置文件的本地副本。

  1. 创建一个文件夹,并将 svcutil.exe 复制到新文件夹中。 通常可以在 Windows SDK 安装位置找到 svcutil.exe,特别是 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin。

  2. 在新文件夹中创建名为 svcutil.exe.config 的文件。

  3. 将绑定和客户端终结点添加到 svcutil.exe.config 文件。 必须从新文件夹运行 svcutil.exe,以确保使用正确的配置。

    重要

    客户端终结点的 name 属性必须指定连接 URI 中使用的方案。 此值区分大小写。

    <configuration>
      <system.serviceModel>
        <client>
          <!-- the name should match the required scheme of the WS-Metadata Exchange endpoint
          and the contract should be "IMetadataExchange" -->
          <endpoint name="oracledb"
                    binding="oracleDBBinding"
                    bindingConfiguration="OracleDBBinding"
                    contract="IMetadataExchange" />
        </client>
        <bindings>
            <oracleDBBinding>
                <binding name="OracleDBBinding" acceptCredentialsInUri="true" />
            </oracleDBBinding>
        </bindings>
    
      </system.serviceModel>
    
    </configuration>
    

注意

可以在绑定配置中设置 Oracle 数据库适配器的任何绑定属性。

有关为 svcutil.exe 配置非默认绑定的详细信息,请参阅 WCF 文档中的 https://go.microsoft.com/fwlink/?LinkId=96077“自定义安全元数据终结点”主题。

为 POLLINGSTMT 操作配置非默认绑定

若要使用 svcutil.exe 为 POLLINGSTMT 操作创建 WCF 服务协定,除了 acceptCredentialsInUri 之外,还必须配置非默认绑定以包括 pollingStatement 属性。 pollingStatement 必须包含面向表的 SELECT 语句。 Oracle 数据库适配器使用此属性生成类,该类表示 POLLINGSTMT 操作返回的强类型结果集。 以下示例演示了一个绑定配置,该配置用于为面向 /SCOTT/EMP 表的 POLLINGSTMT 操作生成 WCF 服务协定。

<bindings>
    <oracleDBBinding>
        <binding name="OracleDBBinding" acceptCredentialsInUri="true"
                                   pollingStatement="SELECT * FROM EMP FOR UPDATE" />
    </oracleDBBinding>
</bindings>

使用 svcutil.exe 创建 WCF 客户端类或 WCF 服务协定

若要使用 svcutil.exe 为 Oracle 数据库适配器生成 WCF 客户端代码或 WCF 服务协定 (接口) ,必须提供一个连接 URI,该 URI 指定 WS-Metadata Exchange (MEX) 终结点,以及 svcutil.exe 要为其生成代码的操作。 还必须在连接 URI 中指定 Oracle 数据库的连接凭据。

注意

必须先将其配置为使用非默认绑定,然后才能将 svcutil.exe 与 Oracle 数据库适配器配合使用;有关如何执行此操作的信息,请参阅 为 Oracle 数据库适配器配置 svcutil.exe

按以下方式在 Oracle 数据库适配器连接 URI 中指定 MEX 终结点和目标操作:

  • 必须在query_string中包含“wsdl”参数。 如果它是query_string中的第一个参数,则会在问号 (?) 后面指定它。 如果它不是第一个参数,则其前面应带有与号 (&) 。

  • 必须遵循一个或多个“op”参数的“wsdl”参数。 每个“op”参数前面有一个和号 (&) ,并指定目标操作的节点 ID。

    以下三个示例演示如何使用 svcutil.exe 以各种操作为目标。

    此示例为 /SCOTT/EMP 表上的 Insert 操作创建 WCF 客户端类。

    .\svcutil “oracledb://User=SCOTT;Password=TIGER@ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert"

    此示例为 /SCOTT/EMP 表上的 Insert 和 Delete 操作创建 WCF 客户端类。

    .\svcutil “oracledb://User=SCOTT;Password=TIGER@ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"

    此示例为 POLLLINGSTMT 操作创建 WCF 服务协定。 (若要使用 svcutil.exe 为 POLLINGSTMT 操作生成 WCF 服务协定,必须为包含轮询语句的 svcutil.exe 配置非默认绑定。)

    .\svcutil “oracledb://User=SCOTT;Password=TIGER@ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/POLLINGSTMT"

重要

必须将连接 URI 放在命令行上的引号中。 否则,svcutil.exe 尝试检索 Oracle 数据库适配器不支持的操作的元数据。 此类尝试的结果未定义。

默认情况下,svcutil.exe 将生成的代码放在 output.cs 文件中;但是,可以通过设置命令行开关来更改输出文件的名称以及 svcutil.exe 使用的许多其他选项。 有关 svcutil.exe 支持的选项的详细信息,请参阅 WCF 文档中 https://go.microsoft.com/fwlink/?LinkId=72777的“ServiceModel 元数据实用工具 (Svcutil.exe) ”主题。

Svcutil.exe 不提供搜索 (操作的功能,例如,使用通配符) 。 必须为要面向的特定操作显式指定节点 ID。 不能指定仅引用类别的节点 ID。 有关 Oracle 数据库适配器显示的节点 ID 的详细信息,请参阅 元数据节点 ID

添加适配器服务参考 Visual Studio 插件提供高级浏览和搜索功能,可大大简化 WCF 客户端类和 WCF 服务协定的生成。 有关添加适配器服务引用插件的详细信息,请参阅 为 Oracle 数据库解决方案项目生成 WCF 客户端或 WCF 服务协定

另请参阅

Oracle 数据库的 BizTalk 适配器的消息和消息架构