Core使用SAP Web Service

 

  .Net Core在使用SAP的Web Service會遭遇到一些錯誤,貌似目前並不支持SAP中的Web Service,咱們須要曲線實現下調用過程:app

  經測試,再也不須要Framework項目中轉,System.ServiceModel的幾個Nuget升級到最新版便可。如今生成的代碼已經有所差別了,簡單的更改便可使用。ide

 

  

 

 

  

  •  使用Framework的項目來「添加服務引用」,

  

  •   找到生成目錄下的Reference.cs文件並打開

 

  • 因該命名空間已是SAPInterface.FAChange3下了,因此移除掉該文件中全部的"SAPInterface.FAChange3."字樣。
  • 文件中咱們看到有個接口與類的名稱同樣,這是錯誤的。咱們給接口名稱前面增長I,改成IZFAMS_AS02。

  • 修改掉如下幾處應該使用接口的內容:
    •  

  •  將該文件保存並拷貝到Core項目中,修改命名空間爲Core的命名空間
  • 調用該文件,示例方法:

  

public class TransferWsR { private ZFAMS_ABT1NChannel callClient { get; set; } public TransferWsR() { // 建立 HTTP 綁定對象
            var binding = new BasicHttpBinding(); binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; var appSection = IocManager.Instance.Resolve<IConfiguration>().GetSection("AppSettings"); // 根據 WebService 的 URL 構建終端點對象
            var wsUrl = appSection["SAPWsTransferUrl"]; var endpoint = new EndpointAddress(wsUrl); // 建立調用接口的工廠,注意這裏泛型只能傳入接口
            var factory = new ChannelFactory<ZFAMS_ABT1NChannel>(binding, endpoint); factory.Credentials.UserName.UserName = appSection["SAPUserName"]; factory.Credentials.UserName.Password = appSection["SAPPassword"]; // 從工廠獲取具體的調用實例 
            callClient = factory.CreateChannel(); callClient.OperationTimeout = new TimeSpan(0, 20, 0); } public TransferOutput DoTransfer(TransferInput input) { var rq = new ZFAMS_ABT1NRequest(); var data = new ZFAMS_ABT1NInput { IT_ABT1N = new ZST_ABT1N[] { AutoMapper.Mapper.Map<ZST_ABT1N>(input) } }; rq.ZFAMS_ABT1N = data; try { var rp = callClient.ZFAMS_ABT1N(rq); var result = rp.ZFAMS_ABT1NResponse.ET_RETURN.FirstOrDefault(); if (result == null) { throw new Exception("調用結果爲Null!"); } return AutoMapper.Mapper.Map<TransferOutput>(result); } catch (Exception ex) { throw ex; } } }
View Code
相關文章
相關標籤/搜索