SAP .NET Connector (SAPNCO) 和 .Net Core

6
SAP .NET Connector与.NET Core框架不兼容。 在使用.NET Core时,是否有其他方法可以从SAP检索数据?
我已经在NuGet包管理器中搜索了替代方案,但没有找到。是否有任何可行的解决办法可以使用?
我非常希望能够享受.NET Core的性能优势,但同时也需要能够连接到SAP。

作为一种解决方法,您可以创建自己的NuGet包,其中包含Sap.Data.Hana.v4.5.dll文件,如此处所示:https://dev59.com/jZ3ha4cB1Zd3GeqPb_Lr。Dotnet Build会抱怨框架不匹配,但它仍然可以工作(至少在Windows上)。 - Daz
4个回答

3

对于从.NET Core或.NET Framework应用程序发起呼叫,我已经开源了一个跨平台库SapNwRfc

NuGet上获取它:

dotnet add package SapNwRfc

或者

PM> Install-Package SapNwRfc

优点:

  • 跨平台:Windows / Linux / macOS
  • 按照约定映射输入和输出模型(零配置)
  • 使用表达式树动态生成映射函数
  • 支持连接池和重试,便于 DI
  • 通过简单易测的可模拟接口实现测试驱动开发
  • 遵循 MIT 许可证

该库已经进行了充分的单元测试,可以用于生产环境。

示例

string connectionString = "AppServerHost=MY_SERVER_HOST; SystemNumber=00; User=MY_SAP_USER; Password=SECRET; Client=100; Language=EN; PoolSize=5; Trace=8";

using var connection = new SapConnection(connectionString);
connection.Connect();

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",
});

更多细节请查看README


1

我已经创建了一个库,可以轻松地从.NET CORE中进行SAP RFC调用。该库支持Windows、Linux和macOS。请检查它是否满足您的需求。https://github.com/nunomaia/NwRfcNet/


0

我了解您在SAP端有一个基于SOAP的服务,并且您尝试通过.NetCore连接此SAP服务。如果这种情况是真实的,不幸的是,您无法通过“添加服务引用”来连接SOAP服务与.NetCore。但是您可以搜索“.NetCore Wcf Client Service”。

另一种解决方案是使用Rest服务并模拟SOAP协议。

这里有一个相关问题和解决方案的示例。

客户端发送SOAP请求并接收响应


实际上,我在我的项目(.net Framework 4.5)中使用了nuget包https://www.nuget.org/packages/sapnco3.x64/。现在我已经在.NET Core中创建了一个测试应用程序,但似乎我无法使用该包,因为它与.NET Core不兼容。我想知道是否有其他的nuget包可以用来连接SAP(通过RFC,而不是通过SOAP)... - Dries

-1

除了huysentruitw的出色工作外,我还想提到我们的库:

dbosoft YaNco(Yet another .NET connecto):https://github.com/dbosoft/YaNco


亮点:

  • 跨平台
  • 支持DI/单元测试
  • 基于函数式编程(使用Language.Ext
  • 支持ABAP回调函数
  • 提供商业支持和咨询服务,网址为dbosoft.eu

许可证:MIT

.NET版本:.NET 4.7.1及以上,.NET Core 2.0及以上,NET 5.0

支持的平台:Windows,Linux和MacOS

Nuget:Dbosoft.YaNco


YaNco不使用从/到POCOs的映射,而是使用函数来映射SAP RFC RFMs的输入/输出。这为您提供了许多灵活性,可以自由地映射数据。

示例:

       await context.CallFunction("BAPI_COMPANYCODE_GETLIST",
                Output: f => f
                    .MapTable("COMPANYCODE_LIST", s =>
                        from code in s.GetField<string>("COMP_CODE")
                        from name in s.GetField<string>("COMP_NAME")
                        select (code, name)))
            .Match(
                r =>
                {
                    foreach (var (code, name) in r)
                    {
                        Console.WriteLine($"{code}\t{name}");
                    }
                },
                l => Console.WriteLine($"Error: {l.Message}"));

该库需要更好的文档和示例。 - Jesus Zamora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接