最近在做業務系統與EAS進行財務功能集成項目時,系統集成接口調用時出現以前未遇到過的問題
1. 項目環境
系統 | 技術平臺 | 系統版本 | 接口方式 |
---|---|---|---|
業務系統 | .net / C# | - | webservice |
EAS | java | V8.2 | webservice |
2. 問題描述
在業務系統通過visual studio服務引用功能引用eas webservice,例如:http://100.100.100.100:6888/ormrpc/services/EASLogin?wsdl
然後webservice調用示例代碼如下:
ConsoleApp2.EASLoginProxyService proxy = new ConsoleApp2.EASLoginProxyService();
ConsoleApp2.WSContext context = proxy.login("tanze", "", "eas", "A001", "L2", 0);
Console.WriteLine("sessionId : " + context.sessionId);
Console.ReadKey();
在執行webservice接口調用時,報錯: 操作 login1 中的 RPC Message loginRequest1 具有無效的正文名稱 login。必須爲 login1
3. 問題分析
EAS 7.5的時候直接WEB飲用添加WSDL地址是可以的。
但是EAS 8.2以後,就會收到錯誤:
操作 login1 中的 RPC Message loginRequest1 具有無效的正文名稱 login。必須爲 login1
visual studio 服務引用添加自動生成的代理,與EAS 8.2 WSDL不一致,導致接口調用報錯。
4. 解決方法
手動使用 wsdl.exe 工具生成webservice服務代理
wsdl.exe 的存放位置如下:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe
步驟如下:
(1)打開 vs 開發控制檯 Developer Command Prompt for VS 2019
(2)在控制檯中輸入如下指令
wsdl /language:c# /n:Demo /out:d:/TestService.cs http://www.abc.com/webservice/test?wsdl
參數說明如下
/language:C# 指定編程語言爲 C#
/n:Demo 指定名稱空間爲 Demo
/out: 指定文件保存路徑和文件名 d:/TestService.cs
http://www.abc.com/webservice/test?wsdl 爲wsdl文件路徑,也可以是物理路徑(如:C:/test.wsdl)