可以使用 ServiceModel 元数据实用工具(svcutil.exe)来生成 WCF 客户端类或 WCF 服务协定(接口),用于 Microsoft BizTalk 适配器为 Oracle 数据库公开的操作。 运行 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 配置文件的本地副本。
创建文件夹,并将 svcutil.exe 复制到新文件夹中。 通常可以在 Windows SDK 安装位置找到 svcutil.exe,特别是 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin。
在新文件夹中创建名为 svcutil.exe.config 的文件。
将绑定和客户端终结点添加到 svcutil.exe.config 文件。 必须从新文件夹运行 svcutil.exe,以确保使用了正确的配置。
重要
客户端终结点的名称属性必须指定连接 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 服务协定,必须配置非默认绑定以包括 pollingStatement 属性,以及 acceptCredentialsInUri。 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中的第一个参数,则会在问号(?)后面指定它。 如果不是第一个参数,则它应前面有一个和号(>)。
需要在“wsdl”参数后跟随一个或多个“op”参数。 每个“op”参数前面都有一个和号(&),并指定目标操作的节点 ID。
以下三个示例演示如何通过使用 svcutil.exe 以及适用于所有示例的安全信息来针对各种操作。
谨慎
此示例或指南引用敏感信息,例如连接字符串或用户名和密码。 切勿在代码中硬编码这些值,并确保使用最安全的身份验证来保护机密数据。 有关详细信息,请参阅以下文档:
此示例为 /SCOTT/EMP 表的插入操作创建了一个 WCF 客户端类。
.\svcutil "oracledb://User=SCOTT;Password=TIGER@ADAPTER?wsdl&op=http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert"
此示例创建一个 WCF 客户端类,用于在 /SCOTT/EMP 表上执行插入(Insert)和删除(Delete)操作。
.\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"
此示例为 POLLINGSTMT 操作创建 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 服务协定。