在 NetStandard 2.0 类库中托管 WCF 服务

Posted

技术标签:

【中文标题】在 NetStandard 2.0 类库中托管 WCF 服务【英文标题】:Hosting a WCF service in NetStandard 2.0 Class Library 【发布时间】:2021-11-13 22:20:50 【问题描述】:

我最近将带有升级助手工具的 dotnet framework v4.7.2 WCF 服务迁移到 NetStandard 2.0。项目成功迁移和编译,但是我无法从 Visual Studio 或 dotnet cli 启动服务。 我从 dotnet cli 工具得到的错误是:

遇到致命错误。未找到执行应用程序所需的库“hostpolicy.dll”。

并且我尝试从 Visual Studio 启动服务时遇到的错误,解决方案资源管理器 -> 右键单击​​ wcf 项目 -> 调试 -> 启动新实例是:

输出类型为类库的项目无法直接启动。

P.S 当 WCF 服务还是 dotnet framework v4.7.2 时,我可以很容易地在 Visual Studio 中执行上述过程来启动服务。

【问题讨论】:

【参考方案1】:

据我所知,.net 4.7.2 是支持 .netstandard 2.0 In this link 的最低真实版本。

您可以将其备份并升级到 4.7.2 进行试用。

【讨论】:

v4.7.1 是一个错字,我编辑了它。 wcf 宿主项目中使用的 dotnet 框架的正确版本是 v4.7.2 。无论如何,Tanx ? 但是这个操作不太可行,没有什么好的移植方法。【参考方案2】:

.NET Standard 或 .NET Core/.NET 5+ 不支持 WCF 服务器 API,因此没有好方法可以向前迁移此类应用程序。

升级助手会尝试根据之前的项目类型确定项目是否应该升级到库或 exe。对于这个项目,Upgrade Assistant 猜测它是一个库,因为没有传统的 main 方法,也不是 Web 应用程序或工具理解为可执行的其他项目类型。但是,无论是将其升级为 .NET Standard 库还是 .NET 5 exe,它都不起作用,因为 WCF 服务器 API 仅在 .NET Framework 上受支持。

如果升级助手在此过程的早期提醒您这一点可能会很好,这样您就知道升级不适用于此类项目。我认为它具有这样的功能,但对于这个特定的项目,它一定是错过了。您可以在该工具的 GitHub 页面 (https://github.com/dotnet/upgrade-assistant/issues) 上提供反馈。

至于如何实际升级 WCF 服务器,您需要使用不同的技术重新架构,例如 ASP.NET Core、gRPC 或 CoreWCF。

【讨论】:

以上是关于在 NetStandard 2.0 类库中托管 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章

将 .NET Core 2.0 类库转换为 .NET Standard

在托管 C++ 类库中使用 System::Drawing 命名空间

在同步类库中使用HttpClient

从 .net 核心控制台应用程序引用 .net 标准 2.0 库中的 dll 时出错

将 .NetStandard 2.0 Nuget 包安装到 VS2015 Net 4.6.1 项目中

WebApi控制器使用类库