在 Oracle 数据库中使用 WS-Metadata Exchange 获取元数据
作为 Windows Communication Foundation (WCF) 自定义绑定,适用于 Oracle 数据库的 Microsoft BizTalk 适配器公开了一个 WS-Metadata Exchange (MEX) 终结点,可用于从适用于 Oracle 数据库的 Microsoft BizTalk 适配器检索特定操作的元数据。
WCF 提供了丰富的基础结构,用于导出、发布、检索和导入有关服务的元数据。 WCF 服务(如适配器)使用元数据描述如何与服务终结点交互,以便工具(如 svcutil.exe)可以自动生成客户端代码来使用服务。 WCF 将服务的元数据表示为 MetadataSet 类型的实例,该类型与 WS-Metadata Exchange (MEX) 中定义的元数据序列化格式紧密相关。 可以使用 MetadataExchangeClient 为适配器上的目标操作创建 MetadataSet。
WCF 对元数据交换的支持是一个广泛的主题,超出了本文档的范围。 有关 WCF 中对元数据的支持的详细信息,请参阅 元数据。 有关 WCF 为元数据公开的体系结构、类和命名空间的特别好说明,请参阅 元数据体系结构概述。 在继续操作之前,应熟悉这些 WCF 主题中与从 WCF 服务检索元数据相关的内容。
以下主题包含有关如何使用 MetadataExchangeClient 从 Oracle 数据库适配器检索元数据的信息。
使用 MetadataExchangeClient 检索元数据
若要使用 MetadataExchangeClient ,必须指定连接 URI 和 OracleDBBinding) (绑定。 连接 URI 标识要检索元数据的操作。
以下部分包含有关如何指定连接 URI、重要绑定属性以及如何使用 MetadataExchangeClient 从适配器检索元数据的信息。
连接 URI
若要使用 MetadataExchangeClient ,必须提供 Oracle 连接 URI,用于指定要检索元数据的 MEX 终结点和操作。 按以下方式在连接 URI 中指定 MEX 终结点和目标操作:
必须在查询字符串中包含“wsdl”参数。 如果它是查询字符串中的第一个参数,则会在问号 (?) 后面指定它。 如果不是第一个参数,则它前面应带有与号 (&) 。
必须遵循一个或多个“op”参数的“wsdl”参数。 每个“op”参数前面都有一个与号 (&) ,并指定目标操作 (节点 ID) 的消息操作。
例如,以下连接 URI 面向 SCOTT 的插入和删除操作。EMP 表。 突出显示了“wsdl”和“op”参数。
"oracledb://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 操作生成的命名空间,则应在查询字符串中指定 PollingId 参数。
如何将此连接 URI 传递到 MetadataExchangeClient 取决于用于创建客户端并从适配器检索元数据的重载方法。
有关 Oracle 连接 URI 的详细信息,请参阅 创建 Oracle 数据库连接 URI。
绑定属性
创建 MetadataExchangeClient 时,必须指定 OracleDBBinding。
有几个绑定属性会影响适配器生成元数据的方式。 这些属性为:
EnableSafeTyping
UseSchemaInNamespace
PollingStatement
重要
如果要检索 POLLINGSTMT 操作的元数据,则必须设置 PollingStatement 绑定属性。
在对 MetadataExchangeClient 调用 GetMetadata 方法之前,应确保将这些绑定属性设置为应用程序所需的值。 有关 Oracle 数据库适配器绑定属性的详细信息,请参阅 阅读有关 Oracle 数据库适配器绑定属性的信息。
示例
以下示例使用 MetadataExchangeClient 为 SCOTT 上的插入、更新、删除和选择操作创建服务说明 (WSDL 文档) 。EMP 表。 WSDL 保存到文件 EmpOperations.wsdl。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;
// Needed for WCF and Oracle Adapter
using System.ServiceModel;
using Microsoft.ServiceModel.Channels;
using Microsoft.Adapters.OracleDB;
// Needced for MetadataExchangeClient class
using System.ServiceModel.Description;
// Needed for ServiceDescription class
using System.Web.Services;
namespace OracleMetadataExchange
{
class Program
{
static void Main(string[] args)
{
//create a binding
OracleDBBinding binding = new OracleDBBinding();
//create a metadata exchange client that will retrieve metadata according to the WS-MEX standard
MetadataExchangeClient client = new MetadataExchangeClient(binding);
client.SoapCredentials.UserName.UserName = "SCOTT";
client.SoapCredentials.UserName.Password = "TIGER";
//set up an endpoint address and specifies the operations for which we want metadata
string connectionUri = "oracledb://ADAPTER?wsdl"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Insert"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Update"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Delete"
+ "&op="
+ "http://Microsoft.LobServices.OracleDB/2007/03/SCOTT/Table/EMP/Select";
EndpointAddress address = new EndpointAddress(connectionUri);
//get the metadata
MetadataSet ms = client.GetMetadata(address);
// Check for the metadata set size
Collection<MetadataSection> documentCollection = ms.MetadataSections;
if (documentCollection != null && documentCollection.Count > 0)
{
//get the wsdl from the metadata set
System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;
//save the wsdl to a file
wsdl.Write("EmpOperations.wsdl");
}
}
}
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈