在 SAP 中使用 WS-Metadata Exchange 获取元数据
作为 Windows Communication Foundation (WCF) 自定义绑定,适用于 mySAP Business Suite 的 Microsoft BizTalk 适配器公开了一个 WS-Metadata Exchange (MEX) 终结点,可用于从适用于 mySAP Business Suite 的 Microsoft BizTalk 适配器检索特定操作的元数据。
WCF 提供了丰富的基础结构,用于导出、发布、检索和导入有关服务的元数据。 WCF 服务(如适配器)使用元数据描述如何与服务终结点交互,以便工具(如 svcutil.exe)可以自动生成客户端代码来使用服务。 WCF 将服务的元数据表示为 MetadataSet 类型的实例,该类型与 WS-Metadata Exchange (MEX) 中定义的元数据序列化格式紧密相关。 可以使用 MetadataExchangeClient 为适配器上的目标操作创建 MetadataSet。
WCF 对元数据交换的支持是一个广泛的主题,超出了本文档的范围。 有关 WCF 中对元数据的支持的详细信息,请参阅 上的 https://go.microsoft.com/fwlink/?LinkId=105634WCF 文档中的“元数据”。 有关 WCF 为元数据公开的体系结构、类和命名空间的特别好说明,请参阅 上的 https://go.microsoft.com/fwlink/?LinkId=105635“元数据体系结构概述”。 在继续操作之前,应熟悉这些 WCF 主题中与从 WCF 服务检索元数据相关的内容。
以下主题包含有关如何使用 MetadataExchangeClient 从 SAP 适配器检索元数据的信息。
使用 MetadataExchangeClient 检索元数据
若要使用 MetadataExchangeClient ,必须指定连接 URI 和绑定 (SAPBinding) 。 连接 URI 标识要检索元数据的操作。
以下部分包含有关如何指定连接 URI、重要绑定属性以及如何使用 MetadataExchangeClient 从适配器检索元数据的信息。
连接 URI
若要使用 MetadataExchangeClient ,必须提供一个 SAP 连接 URI,用于指定要检索元数据的 MEX 终结点和操作。 按以下方式在连接 URI 中指定 MEX 终结点和目标操作:
必须在查询字符串中包含“wsdl”参数。 如果它是查询字符串中的第一个参数,则会在问号 (?) 后面指定它。 如果不是第一个参数,则它前面应带有与号 (&) 。
必须遵循一个或多个“op”参数的“wsdl”参数。 每个“op”参数前面都有一个与号 (&) ,并指定目标操作 (节点 ID) 的消息操作。
例如,以下连接 URI 面向 SALESORDER_CREATEFROMDAT201 IDOC 和 SALESORDER_CREATEFROMDAT202 IDOC 的 Send 操作。 突出显示了“wsdl”和“op”参数。
"sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?wsdl&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT201//620/Send&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT202//620/Send"
注意
无需在入站操作的连接 URI 中包含侦听器参数。 适配器作为客户端进行连接,以从 SAP 系统检索元数据。
还可以使用在 Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants
处定义的常量来帮助在创建连接 URI 时指定操作。 本主题末尾的代码示例对此进行了演示。
如何将此连接 URI 传递到 MetadataExchangeClient 取决于用于创建客户端并从适配器检索元数据的重载方法。
有关 SAP 连接 URI 的详细信息,请参阅 创建 SAP 系统连接 URI。
绑定属性
创建 MetadataExchangeClient 时,必须指定 SAPBinding。
有几个绑定属性会影响适配器生成元数据的方式。 这些属性为:
GenerateFlatfileCompatibleIdocSchema
ReceiveIDocFormat
EnableSafeTyping
FlatFileSegmentIndicator
在对 MetadataExchangeClient 调用 GetMetadata 方法之前,应确保将这些绑定属性设置为应用程序所需的值。 有关 SAP 适配器绑定属性的详细信息,请参阅 了解 mySAP Business Suite 绑定属性的 BizTalk 适配器。
示例
以下示例使用 MetadataExchangeClient 为BAPI_TRANSACTION_COMMIT和BAPI_TRANSACTION_ROLLBACK操作创建服务说明 (WSDL 文档) 。
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;
// Needed for WCF and SAP adapter
using System.ServiceModel;
using Microsoft.ServiceModel.Channels;
using Microsoft.Adapters.SAP;
// Needed for MetadataExchangeClient class
using System.ServiceModel.Description;
// Needed for ServiceDescription class
using System.Web.Services;
namespace SapMetadataExchangeClient
{
class Program
{
static void Main(string[] args)
{
//Create a binding
SAPBinding binding = new SAPBinding();
//Create a metadata exchange client that will retrieve metadata according to the WS-MEX standard.
MetadataExchangeClient client = new MetadataExchangeClient(binding);
client.SoapCredentials.UserName.UserName = "YourUserName";
client.SoapCredentials.UserName.Password = "YourPassword";
//Set up an endpoint address and specify the operation for which we want metadata.
string connectionUri = "sap://Client=800;lang=EN@A/YourSAPHost/00?wsdl&op="
+ Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
+ "BAPI_TRANSACTION_COMMIT"
+ "&op="
+ Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
+ "BAPI_TRANSACTION_ROLLBACK";
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("BapiTx.wsdl");
}
}
}
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈