Core使用SAP Web Service
2024-09-01 15:12:53
.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(, , );
} 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;
} }
}
最新文章
- 外边距塌陷之clearance
- C# 全角和半角转换以及判断的简单代码
- Zedboard安装桌面系统ubuntu及opencv(1)
- FMDB浅析
- java ---运算符
- JavaScript:JavaScript中常见获取对象元素的方法
- hiho(1081),SPFA最短路,(非主流写法)
- RMAN备份与恢复之数据文件
- c# winform 关于DataGridView的一些操作(很全,绝对够用)
- .net导出Word的一种方法
- 转:C语言申请内存时堆栈大小限制
- FS SIP呼叫的消息线程和状态机线程
- 【Unity编程】欧拉角与万向节死锁(图文版)
- common lisp的宏的工作模式
- 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)
- 一些不常用但又很有用的css小tips
- OpenCV3编程入门笔记(一)
- 计算机组成原理——主存与cache的映射关系
- Linux驱动:内核等待队列
- VS Code设置中文插件