SapNwRfc 适用于 .NET 5 .NET Core 和 .NET Framework 的 SAP NetWeaver RFC 库

SAP NetWeaver RFC library

This cross-platform library allows you to call SAP NetWeaver RFC functions from .NET 5, .NET Core and the .NET Framework.

The library is fully tested and production ready. Supported operating systems are Windows, Linux and macOS.

Also supports connection pooling for more complex applications, see below.

Get it on NuGet

dotnet add package SapNwRfc

or

PM> Install-Package SapNwRfc

Prerequisites

This library requires the SAP NetWeaver RFC Library 7.50 SDK C++ binaries that should be installed locally. For download and installation instructions see SAP Note 2573790.

You can either place the DLL's in your project output folder or put them in a folder available in the systems PATH (Windows), LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (macOS) environment variable.

On Windows, the 7.50 version of the SAP binaries also require you to install the 64-bit version of the Visual C++ 2013 Redistributable package which can be downloaded and installed from here.

MacOSX and DYLD_LIBRARY_PATH

When your application is started as a child-process (f.e. when running it using Visual Studio for Mac), it is possible that the DYLD_LIBRARY_PATH is not forwarded to the child-process. This is because of this runtime protection Apple has added to OSX.

The simplest solution to this problem is to make sure the SAP binaries are placed in the working directory of your application.

or to use the NativeLibrary.SetDllImportResolver method in your application.

A more flexible workaround is to set the import resolver for the SapLibrary using the SetDllImportResolver-method like this:

cs 复制代码
NativeLibrary.SetDllImportResolver(
    assembly: typeof(SapLibrary).Assembly,
    resolver: (string libraryName, Assembly assembly, DllImportSearchPath? searchPath) =>
    {
        if (libraryName == "sapnwrfc")
        {
            NativeLibrary.TryLoad(
                libraryPath: Path.Combine("<your_sap_rfc_binaries_path>", libraryName),
                handle: out IntPtr handle);

            return handle;
        }

        return IntPtr.Zero;
    });

Call function with input parameters but no output parameters

cs 复制代码
class SomeFunctionParameters
{
    [SapName("SOME_FIELD")]
    public string SomeField { get; set; }
}

using var someFunction = connection.CreateFunction("BAPI_SOME_FUNCTION_NAME");
someFunction.Invoke(new SomeFunctionParameters
{
    SomeField = "Some value",
});

Call function with input and output parameters

cs 复制代码
class SomeFunctionParameters
{
    [SapName("SOME_FIELD")]
    public string SomeField { get; set; }
}

class SomeFunctionResult
{
    [SapName("RES_ABC")]
    public string Abc { get; set; }
}

using var someFunction = connection.CreateFunction("BAPI_SOME_FUNCTION_NAME");
var result = someFunction.Invoke<SomeFunctionResult>(new SomeFunctionParameters
{
    SomeField = "Some value",
});

// Do something with result.Abc
相关推荐
Crazy Struggle8 小时前
.NET 8 + Vue/UniApp 高性能前后端分离框架
vue.js·uni-app·.net·后台管理系统
-心铭-10 小时前
有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习
数据库·学习·.netcore
wkj00110 小时前
.netCore运行的环境WindowsHosting和dotnet-sdk区别
.netcore
孟章豪11 小时前
在 Kubernetes 上部署 .NET 应用的完整指南:从容器化到自动化 CI/CD
kubernetes·自动化·.net
脚步的影子1 天前
.net core8 使用JWT鉴权(附当前源码)
java·开发语言·.netcore
friklogff1 天前
【C#生态园】从容面对.NET性能挑战:全面解析多种性能监控工具
开发语言·c#·.net
Crazy Struggle1 天前
2024 年 C# 高效开发:精选实用类库
c#·.net·精选类库
Lingbug1 天前
.Net网络通信组件 - TouchSocket
服务器·c#·.net·.netcore
rrokoko1 天前
TIOBE 编程指数 9 月排行榜公布 VB.Net第七
.net·vb.net