将 ServiceModel 元数据实用工具与适用于 mySAP Business Suite 的 BizTalk 适配器配合使用
可以使用 ServiceModel 元数据实用工具 (svcutil.exe) 生成 WCF 客户端类或 WCF 服务协定, (接口) mySAP Business Suite 的 Microsoft BizTalk 适配器公开的操作。 运行 svcutil.exe 以生成 WCF 客户端类或 WCF 服务协定后,可以在代码中包含生成的文件并创建生成的类的实例,或者从生成的接口实现 WCF 服务,以在 SAP 系统上执行操作。
使用 svcutil.exe 需要提供包含凭据的连接 URI。 由于 SAP 适配器默认禁用连接 URI 中的凭据,因此必须将 svcutil.exe 配置为对 SAP 适配器使用非默认绑定。 还可以在非默认绑定中配置其他绑定属性;例如,若要为 BAPI 操作创建 WCF 客户端,必须将 EnableSafeTyping 绑定属性设置为 true。
以下部分介绍如何配置 svcutil.exe,以及如何使用 svcutil.exe 通过 SAP 适配器生成 WCF 客户端代码或 WCF 服务协定。
为 SAP 适配器配置 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,以确保使用正确的配置。
重要
客户端终结点的 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="sap" binding="sapBinding" bindingConfiguration="SAPBinding" contract="IMetadataExchange" /> </client> <bindings> <sapBinding> <binding name="SAPBinding" acceptCredentialsInUri="true"/> </sapBinding> </bindings> </system.serviceModel> </configuration>
可以在绑定配置中设置 SAP 适配器的任何绑定属性。 例如,可以指定以下非默认绑定,以使用 svcutil.exe 为 BAPI 操作生成 WCF 客户端。
<bindings>
<sapBinding>
<binding name="SAPBinding" acceptCredentialsInUri="true"/>
</sapBinding>
</bindings>
有关为 svcutil.exe 配置非默认绑定的详细信息,请参阅 自定义安全元数据终结点。
使用 svcutil.exe 创建 WCF 客户端类或 WCF 服务协定
若要使用 svcutil.exe 生成 WCF 客户端代码或 WCF 服务协定 (SAP 适配器的接口) ,必须提供一个连接 URI,指定 WS-Metadata Exchange (MEX) 终结点,以及 svcutil.exe 生成代码的操作。 还必须在连接 URI 中指定 SAP 系统的连接凭据。
注意
必须先将其配置为使用非默认绑定,然后才能将 svcutil.exe 与 SAP 适配器配合使用;有关如何执行此操作的信息,请参阅 为 SAP 适配器配置 svcutil.exe。
按以下方式在 SAP 适配器连接 URI 中指定 MEX 终结点和目标操作:
必须在查询字符串中包含“wsdl”参数。 如果它是查询字符串中的第一个参数,则会在问号 (?) 后面指定它。 如果它不是第一个参数,则其前面应带有与号 (&) 。
必须遵循一个或多个“op”参数的“wsdl”参数。 每个“op”参数前面有一个和号 (&) ,并指定目标操作的节点 ID。
以下三个示例演示如何使用 svcutil.exe 以各种操作为目标。
此示例为RFC_CALCULATE_TAXES创建 WCF 客户端类。
.\svcutil “sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?wsdl&op=http://Microsoft.LobServices.Sap/2007/03/Rfc/RFC_CALCULATE_TAXES”
此示例为 SALESORDER_CREATEFROMDAT201 和 SALESORDER_CREATEFROMDAT202 IDOC 创建 WCF 客户端类。
.\svcutil “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”
此示例创建一个 WCF 服务协定,用于从 SAP 系统接收SALESORDER_CREATEFROMDAT201 IDOC。 NODE ID 指定接收操作。 由于此示例处理检索元数据,因此无需在连接 URI 的query_string指定侦听器参数。
.\svcutil “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/Receive”
重要
必须将连接 URI 放在命令行上的引号中。 否则,svcutil.exe 尝试检索 SAP 适配器不支持的操作的元数据。 此类尝试的结果未定义。
默认情况下,svcutil.exe 将生成的代码放在 output.cs 文件中;但是,可以通过设置命令行开关来更改输出文件的名称以及 svcutil.exe 使用的许多其他选项。 有关 svcutil.exe 支持的选项的详细信息,请参阅 ServiceModel 元数据实用工具 (Svcutil.exe) 。
Svcutil.exe 不提供搜索 (操作的功能,例如,使用通配符) 。 必须为要面向的特定操作显式指定节点 ID。 操作的节点 ID 等效于其消息操作字符串。 不能指定仅引用类别的节点 ID。 有关 SAP 适配器显示的节点 ID 的详细信息,请参阅 元数据节点 ID。
添加适配器服务参考 Visual Studio 插件提供高级浏览和搜索功能,可大大简化 WCF 客户端类和 WCF 服务协定的生成。 有关添加适配器服务引用插件的详细信息,请参阅 为 SAP 解决方案项目生成 WCF 客户端或 WCF 服务协定。