首页 > 其他分享 >.NET Core如何调SAP接口-.NET Core如何调WebService接口

.NET Core如何调SAP接口-.NET Core如何调WebService接口

时间:2024-01-18 12:16:26浏览次数:30  
标签:Core 接口 result new var input NET SAP

 

  • 情况说明

 

客户提供一个SAP接口,接口通过浏览器可以打开查看,如下图:

 输入帐号密码后登录:

 

  • 接口开发

连接接口服务

上述情况,SAP接口已就绪,现在开始开发接口调用。首先,创建 .NET Core Web项目,然后如下图,连接接口服务。

 

 

 

 

 

 

 

 

 

 

 

创建访问接口的服务

 

访问方法

接口访问服务 SAPWebSevice 完整代码

using ServiceReference1;
using System.ServiceModel;
using WebAPI.Models;

namespace WebAPI.Service
{
    public class SAPWebSevice
    {
        private readonly IConfiguration _cofig;
        public AppSetting _appSetting = new();
        private ZMES_GOODSMVTChannel callClient { get; set; }

        public SAPWebSevice(IConfiguration configuration) 
        {
            _cofig = configuration;
            _cofig.Bind(_appSetting);
            //_dbContextFactory = dbContextFactory;

            // 创建 HTTP 绑定对象
            var binding = new BasicHttpBinding();
            binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
            // 根据 WebService 的 URL 构建终端点对象
            var wsUrl = _appSetting.SAPSetting.InstoreEndpointUrl;
            var endpoint = new EndpointAddress(wsUrl);

            // 创建调用接口的工厂,注意这里泛型只能传入接口
            var factory = new ChannelFactory<ZMES_GOODSMVTChannel>(binding, endpoint);
            factory.Credentials.UserName.UserName = _appSetting.SAPSetting.SAPUserName;
            factory.Credentials.UserName.Password = _appSetting.SAPSetting.SAPPassword;
            // 从工厂获取具体的调用实例 
            callClient = factory.CreateChannel();
            callClient.OperationTimeout = new TimeSpan(0, 20, 0);
        }

       
        /// <summary>
        /// SAP 成品入库服务
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task<ZmesGoodsmvtResponse> DoTransfer(Zsmesgoodsmvt input)
        {
            var rq = new ZmesGoodsmvtRequest()
            {
               ZmesGoodsmvt =new ZmesGoodsmvt()  
            };
            var data = new Zsmesgoodsmvt[]
            {
                new Zsmesgoodsmvt
                {
                    Aufnr=input.Aufnr,
                   Matnr=input.Matnr,
                   Gamng=input.Gamng,
                   Gmein=input.Gmein,
                   Zpost=input.Zpost,
                   Lgort=input.Lgort
                }
            };
            rq.ZmesGoodsmvt.TItems = data;
            try
            {
                var rp =await callClient.ZmesGoodsmvtAsync(rq);
                var result = rp.ZmesGoodsmvtResponse;                         
                if (result == null)
                {
                    //throw new Exception("调用结果为Null!");
                    result=new ZmesGoodsmvtResponse()
                    {
                        EStatus = "E",
                        EMessage = "调用结果为Null!"
                    };
                }

                return result;
            }
            catch (Exception ex)
            {
                var result = new ZmesGoodsmvtResponse()
                {
                    EStatus = "E",
                    EMessage = ex.Message
                };
                return result;
            }
        }
    }
}
View Code

服务创建完成,现在就是调用,我们创建一个控制器(API ) 来触发。

创建控制器,采有Post方法访接口

 

Post API 接口,调 SAPWebService 服务:

 最后,在Program.cs 中注入服务。

 至此,在 .NET Core 使用 API 通过访问 SAP WebSerVice 接口功能全部完成。

 

标签:Core,接口,result,new,var,input,NET,SAP
From: https://www.cnblogs.com/lucky-sebill/p/17971198

相关文章

  • 使用过滤器记录api接口访问时长并记录日志
    usingERP.Helper;usingERP.Models.User;usingSystem;usingSystem.Diagnostics;usingSystem.Web;usingSystem.Web.Http.Controllers;usingSystem.Web.Http.Filters;usingActionFilterAttribute=System.Web.Http.Filters.ActionFilterAttribute;usingLogger......
  • 天气api接口+地区区号以及县市省数据汇总
    地区区号以及县市省数据天气接口:http://t.weather.sojson.com/api/weather/city/+区号eq:http://t.weather.sojson.com/api/weather/city/1013401011.链接下载:https://files.cnblogs.com/files/blogs/708875/sys_area.zip?t=1705546362&download=true2.单独提取代码--需......
  • 记一次 .NET某道闸收费系统 内存溢出分析
    一:背景1.讲故事前些天有位朋友找到我,说他的程序几天内存就要爆一次,不知道咋回事,找不出原因,让我帮忙看一下,这种问题分析dump是最简单粗暴了,拿到dump后接下来就是一顿分析。二:WinDbg分析1.程序为什么会暴程序既然会爆,可能是虚拟地址受限,也可能是系统内存不足,可以用!address......
  • rke2 offline install kubernetes v1.26.12
    文章目录1.准备2.安装ansible3.基础配置3.1配置hosts3.2安装软件包3.3内核参数3.4连接数限制3.5关闭swap、selinux、防火墙3.6时间同步4.RKE2安装4.1下载安装4.2配置其他管理节点4.3新增worker节点1.准备7台主机主机名ipcpu内存diskos角色user密码kube-mast......
  • EtherCAT转PROFINET网关-TEC-380
    TEC-380实现PROFINET控制器和EtherCAT从站设备之间的数据通信,可将多达32个EtherCAT设备连接到PROFINET(RT和IRT)网络。采用ECATStart图形化配置,支持EtherCAT从站设备描述文件(ESI)解析,同时还支持EtherCAT从站热插拔功能。  产品特点:1、实时性强:最短2ms协议转换时间;2、使用方......
  • Istio从入门到精通—— 安装 —— Kubernetes 删除 istio-system namesapce 时候,出现
    Kubernetes删除istio-systemnamesapce时候,出现Terminating解决办法当你在Kubernetes中遇到无法删除处于Terminating状态的命名空间时,可能是由于该命名空间中仍有活跃的资源或服务。要解决这个问题,你可以尝试以下几个步骤:一、常规方法检查命名空间中的活跃资源:......
  • Broodstock breeding behaviour recognition based on Resnet50-LSTM with CBAM atten
    一区top,2022年ComputersandElectronicsinAgriculture分类题目:“基于CBAM注意机制Resnet50-LSTM的亲鱼繁殖行为识别”(Du等,2022,pp.-)(pdf)“BroodstockbreedingbehaviourrecognitionbasedonResnet50-LSTMwithCBAMattentionmechanism”(Du等,2022......
  • C# 中,可以使用 System.Net.Sockets 命名空间中的 UdpClient 类来发送和接收 UDP 数据
    C#中,可以使用System.Net.Sockets命名空间中的UdpClient类来发送和接收UDP数据报文。以下是一个简单的C#示例,演示如何使用UDP发送和接收数据:点击查看代码usingSystem;usingSystem.Net;usingSystem.Net.Sockets;classProgram{staticvoidMain(){......
  • 从Netty到DotNetty
    Netty是什么Netty是一款用于创建高性能网络应用程序的高级框架。Netty是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端DotNetty是什么DotNetty是微软的Azure团队仿造Netty编写的网络应用程序框架。优点关注点分离——业......
  • .net 温故知新【17】:Asp.Net Core WebAPI 中间件
    一、前言到这篇文章为止,关于.NET"温故知新"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NETcore、ASP.NETCORE又有了一个新的认识。不光是从使用,还包括这些知识点的原理,虽然深入原理谈不上,但对于日常使用也够了,我想的是知其然,知其所以然。在实际开发过程中可能......