我有一个用C#编写的Windows服务。我需要让它在Linux上运行。我已经看过可能用Java或C ++重写代码,我可能会这样做,但作为一个中间解决方案,我正在考虑将项目移植到Mono或.NET Core。关键是它是一个相当小的应用程序,因此进行必要的代码更改不应该是太多的工作。
该服务侦听特定的URL端点以执行任务。
基于以下代码示例的示例:
http://localhost:5000/checkStatus?configId=1234
事实上,我几乎已经编译了本节的预期。这一节正在生成我剩余的所有构建错误。据我所知,.NET Core中尚未提供WCF服务。所以我一直在寻找替代方案,但我很难在.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%"
}
}
我还有其他办法吗?
答案 0 :(得分:1)
您对WebGetAttribute
的使用表明您打算创建RESTful服务。虽然WCF在.NET Core中不可用,但支持WebApi。使用WebApi,您可以创建REST服务,这可能就是您所需要的。您可以查看this tutorial by Microsoft如何开始使用此功能。
答案 1 :(得分:0)
如果您尝试在.NET Core上运行ServiceStack,则应引用ServiceStack's .NET Core Release Notes中指示的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”的引用。