.Net Core在使用SAP的Web Service会遭遇到一些错误,貌似目前并不支持SAP中的Web Service,咱们须要曲线实现下调用过程:app
经测试,再也不须要Framework项目中转,System.ServiceModel的几个Nuget升级到最新版便可。如今生成的代码已经有所差别了,简单的更改便可使用。ide
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; } } }