NCo3.1(08) - Nco3 服务器端编程

本篇博文不再重复ABAP调用外部服务器的基础,只介绍 NCo3 开发的过程和要点。需要了解相关知识点的小伙伴们自行参考:

SAP接口编程 之JCo3.0系列(06) - Jco服务器端编程
PyRFC 服务器端编程要点

创建项目

新建一个 Console 项目,选择 .Net Framework 平台。目前 NCo 3.1 不支持 .Net Core。

点击「Create」按钮,完成项目的创建。

添加引用

SAP 已经对 NCo3.0 停止技术支持,所以建议使用 3.1 版本。3.1 版可以从 SAP Connector for Microsoft .NET 下载,但需要下载权限。在本文的源码中,提供了 NCo3.1 的安装程序,以方便没有下载权限的同学。

NCo3.1 安装之后 sapnco.dll 和 sapnco_utils.dll 位于不同的文件夹中。默认的位置为:

因为我下载的是 64 位版本,dll 文件在 GAC_64 文件夹下面。


配置

NCo3 需要登录 SAP 的配置和以及 RFC 服务器的配置,通过两个类来进行配置。首先是登录到 SAP 的配置,创建 SAPDestininationConfig 类,实现 IDestinationConfiguration 接口:

public class SAPDestininationConfig : IDestinationConfiguration
{public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;public bool ChangeEventsSupported(){return false;}public RfcConfigParameters GetParameters(string destinationName){if ("ECC".Equals(destinationName)) {RfcConfigParameters parms = new RfcConfigParameters();parms.Add(RfcConfigParameters.AppServerHost, "sapecc6");  // or ip addressparms.Add(RfcConfigParameters.SystemNumber, "00");        // instance numberparms.Add(RfcConfigParameters.SystemID, "D01");parms.Add(RfcConfigParameters.User, "STONE");parms.Add(RfcConfigParameters.Password, "w123456");parms.Add(RfcConfigParameters.Client, "001");parms.Add(RfcConfigParameters.Language, "EN");parms.Add(RfcConfigParameters.PoolSize, "5");return parms;}else {return null;}}

RFC Server 的配置:

public class RFCServerConfig : IServerConfiguration
{public event RfcServerManager.ConfigurationChangeHandler ConfigurationChanged;public bool ChangeEventsSupported(){return false;}public RfcConfigParameters GetParameters(string serverName){if ("PRD_000".Equals(serverName)) {RfcConfigParameters parms = new RfcConfigParameters();parms.Add(RfcConfigParameters.RepositoryDestination, "ECC");parms.Add(RfcConfigParameters.GatewayHost, "sapecc6");parms.Add(RfcConfigParameters.GatewayService, "sapgw00");parms.Add(RfcConfigParameters.ProgramID, "RFCSERVER");parms.Add(RfcConfigParameters.ConnectionCount, "5");return parms;}else {return null;}}
}

ABAP 函数处理器

namespace SAPNCo3.ServerScenario
{public class FunctionModuleHandler{[RfcServerFunction(Name = "STFC_CONNECTION")]public static void StfcConnection(RfcServerContext context, IRfcFunction function){Console.WriteLine($"Received function call {function.Metadata.Name} from system {context.SystemAttributes.SystemID}.");// 从ABAP获取 import 参数String reqtext = function.GetString("REQUTEXT");Console.WriteLine($"REQUTEXT = {reqtext}\n");// 设置 export 参数function.SetValue("ECHOTEXT", reqtext);function.SetValue("RESPTEXT", "从RFC服务器返回的消息!");}}
}

RFC Server

最后在 Program.cs 中直接创建 RFC Server,并启动:

using SAP.Middleware.Connector;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace SAPNCo3.ServerScenario
{internal class Program{static void Main(string[] args){// Client configurationRfcDestinationManager.RegisterDestinationConfiguration(new SAPDestininationConfig());// Server ConfigurationRfcServerManager.RegisterServerConfiguration(new RFCServerConfig());// Function module handlersType[] handlers = new Type[1] { typeof(FunctionModuleHandler) };// Create RFC ServerRfcServer server = RfcServerManager.GetServer("PRD_000", handlers);// Start serverserver.Start();// 等待client发起调用,指导用户按下 X 键Console.WriteLine("Server has been started. Press X to exit.\n");while (true) {if (Console.ReadLine().Equals("X"))break;}// Server shut downserver.Shutdown(true);            }}

源码

sap_interface_nco3: SAP NCo 3.0 Demos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/230898.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用BootLoader更新S32K144的固件

1、工具:MDK及S32K144的支持包 创芯科技的USB转CAN 及 驱动 Jlink烧写器及驱动 链接:https://pan.baidu.com/s/1jGRdGVEzrO86CpP5UQ2fYQ 提取码:nihd IAP固件升级上位机 2、BootLoader底层文件 a、用MDK打开BootLoader工程 b、更改配置…

网络安全 | 使用人工智能阻止网络攻击

全球范围内分布式拒绝服务 (DDoS) 网络攻击急剧增加,这种数字攻击可以通过大量的互联网流量压垮目标服务器,从而使网站瘫痪。这种攻击每年都会发生数百万起,而且数量和规模都在不断增加。大约三分之一的网站宕机是由于 DDoS 攻击所致。 计算…

RabbitMQ消息的应答

消息的应答机制 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并仅只完成了部分突然它挂掉了,会发生什么情况。RabbitMQ 一旦向消费者传递了一条消息,便立即将该消息标记为删除。在这种情况下,突然有个…

机器学习:领域自适应学习

训练一个分类器是小问题 上难度 训练数据和测试数据不一致,比如训练数据是黑白的,测试时彩色的,结果准确率非常低。 训练数据和测试数据有点差距的时候,能不能效果也能好呢?这就用到了领域自使用domain adptation 用一…

一款LED段码显示屏驱动芯片方案

一、基本概述 TM1620是一种LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、基本特性 采用CMOS工艺 显示模式(8段6位~10段4位&#xff…

【人工智能Ⅰ】实验2:遗传算法

实验2 遗传算法实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,理解求解TSP问题的流程并测试主要参数对结果的影响,掌握遗传算法的基本实现方法。 二、实验原理 旅行商问题,即TSP问题(Traveling Salesman Proble…

Spark on yarn 模式的安装与部署

任务描述 本关任务: Spark on YARN 模式的安装与部署。 相关知识 为了完成本关任务,你需要掌握: Spark 部署模式的种类;Spark on YARN 模式的安装。 Spark 部署模式 Spark 部署模式主要分为以下几种,Spark Stand…

Linux高级IO

文章目录 一.IO的基本概念二.钓鱼五人组三.五种IO模型四.高级IO重要概念1.同步通信 VS 异步通信2.阻塞 VS 非阻塞 五.其他高级IO六.阻塞IO七.非阻塞IO 一.IO的基本概念 什么是IO? I/O(input/output)也就是输入和输出,在著名的冯诺…

MySQL 中的锁(三)

8.7. 死锁和空间锁 一般来说,只要有并发和加锁这两种情况的共同加持下,都会有死锁的身影。 死锁的具体成因,借用我们在并发编程中的内容: 8.7.1. 死锁 8.7.1.1. 概念 是指两个或两个以上的进程在执行过程中,由于竞…

LeetCode(42)有效的字母异位词【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接: 有效的字母异位词 1.题目 给定两个字符串 *s* 和 *t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意:**若 *s* 和 *t* 中每个字符出现的次数都相同,则称 *s* 和 *t* 互为字…

Matlab下载许可证文件 教程(在账号有许可证的前提下)

文章目录 Part.I IntroductionPart.II 许可证文件过期解决方案Chap.I 使用 Internet 自动激活Chap.II 在不使用 Internet 的情况下手动激活 Part.I Introduction 本文主要介绍,在 Mathwork 账号有许可证的前提下,下载许可证的操作流程。 好久没有用 Mat…

Linux小程序之进度条

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:自己能实现进度条 > 毒鸡汤: > …