zoukankan      html  css  js  c++  java
  • Core使用SAP Web Service

      .Net Core在使用SAP的Web Service会遭遇到一些错误,貌似目前并不支持SAP中的Web Service,我们需要曲线实现下调用过程:

      经测试,不再需要Framework项目中转,System.ServiceModel的几个Nuget升级到最新版即可。现在生成的代码已经有所差异了,简单的更改即可使用。

      

      

    •  使用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
  • 相关阅读:
    spark 读取mongodb失败,报executor time out 和GC overhead limit exceeded 异常
    在zepplin 使用spark sql 查询mongodb的数据
    Unable to query from Mongodb from Zeppelin using spark
    spark 与zepplin 版本兼容
    kafka 新旧消费者的区别
    kafka 新生产者发送消息流程
    spark ui acl 不生效的问题分析
    python中if __name__ == '__main__': 的解析
    深入C++的new
    NSSplitView
  • 原文地址:https://www.cnblogs.com/ceci/p/10881626.html
Copyright © 2011-2022 走看看