C#端口到Linux Mono或.NET Core

我有用C#编写的用于Windows的服务。 我需要让它在Linux上运行。 我已经研究过使用Java或C ++重写代码的可能性,我可能会这样做,但作为一个中间解决方案,我正在考虑将项目移植到Mono或.NET Core。 关键是它是一个相当小的应用程序,因此进行必要的代码更改不应该太多。

该服务侦听特定的URL端点以执行任务。

基于以下代码示例的示例:

HTTP://本地主机:5000 /的checkStatus的configId = 1234

HTTP://本地主机:5000 /回波

HTTP://本地主机:5000 /版

事实上,我几乎已经编制了本节的期望。 这一节将产生我所有剩余的构建错误。 我知道WCF服务在.NET Core中尚不可用。 所以我一直在探索替代方案,但我很难在.NET Core的Linux上工作。 我也想避免实现一些相当于在整个NGINX或Apache服务器中重写整个事物或鞋楦的事情。

namespace CheckService
{
    [ServiceContract]
    interface IService
    {
        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        string checkStatus(string configId);

        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        string echo(string value);

        [OperationContract]
        [WebGet(ResponseFormat = WebMessageFormat.Json)]
        string version();
    }
}

我并不完全熟悉WCF,因为我从来没有用过它,而且这个项目最初是由别人编写的。

这是我的project.json。 我知道我可能有一些不必要或不正确的项目。 我一直在测试很多:

{
  "buildOptions": {
    "emitEntryPoint": true,
    "debugType": "portable"
  },
  "dependencies" : {
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "ServiceStack": "4.5.4",
    "System": "4.1.311.2",
    "System.IO": "4.3.0",
    "System.IO.Pipes": "4.0.0",
    "System.Collections": "4.0.11",
    "System.Data.Common": "4.0.0",
    "System.Data.SQLite": "1.0.0",
    "System.ServiceModel": "1.0.0",
    "System.ServiceModel.Web": "1.0.0",
    "System.ServiceModel.Primitives": "4.3.0",
    "System.ServiceModel.Security": "3.9.0",
    "System.ServiceModel.Http": "4.0.0",
    "slf4net.log4net": "0.1.32.1"
  },
  "frameworks": {
    "net461": {
      "frameworkAssemblies": {
        "System.Runtime.Serialization": "4.0.0.0",
        "System.ServiceModel": "4.0.0"
      }
    }
  },
  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview2-final"
    }
  },
  "scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
  }
}

有另外一种方法可以做到这一点吗?


您对WebGetAttribute表明您打算创建一个RESTful服务。 虽然WCF在.NET Core中不可用,但WebApi受支持。 借助WebApi,您可以创建REST服务,这可能是您所需要的。 您可以通过Microsoft查看本教程,了解如何开始使用本教程。


如果您尝试在.NET Core上运行ServiceStack,则应参照ServiceStack的.NET Core发行说明中所述的1.0.* ServiceStack包:

"dependencies" : {
  "ServiceStack.Core": "1.0.*",
  "ServiceStack.Common.Core": "1.0.*",
  "ServiceStack.Client.Core": "1.0.*",
  "ServiceStack.Interfaces.Core": "1.0.*",
  "ServiceStack.Text.Core": "1.0.*"
},

或者如果你没有使用https://servicestack.net,你应该删除你的project.json中对“ServiceStack”的引用。

链接地址: http://www.djcxy.com/p/15949.html

上一篇: C# port to Linux Mono or .NET Core

下一篇: Deploying Linux using Mono to deploy aspnet web/website application?