最近接口项目需要用PB调用SAP的Web Service,研究了PB的Webservice Proxy很久。
第1个问题是SAP的Web Service有身份验证,主程序是PB9开发的,pbsoapclient90.pbd里没有对应函数,说是需要PB10以上,PB11.5经验证可以解决。或者安装微软SOAP工具控件,PB9通过它调用Web Service也是可以的。
但核心问题来了:SAP的Web Service函数中参数实际传输的是Table,也就是结构体数组参数。测试证明,即使PB12.5都对结构体参数的Web Service支持不完善,就不要说结构体数组了!
肿么办?研究发现,我们可以使用C#调用结构体数组参数的Web Service,然后拆解为单结构体,转换为字符串数组参数,封装为DLL函数,供PB调用。这种方式理论上,应该适用于PB的任何版本。
——by nocry115/泥草鞋
这里,我们以VS2010 C#与PB9进行说明;将对方Web Service的WSDL文件拷贝到本地,这个Web Service定义了1个函数,其参数为结构体数组,返回一个含2字符串的结构体。
1、使用C#调用Web Service生成dll
1)首先,新建Visual C#的“类库”项目,我们可以命名为:sapws1(注意:C#区别大小写)。
双击改项目的属性Properties,在“应用程序”页面点击【程序集信息】。
在“为COM互操作注册”处打钩。