在 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 命名空间
从 .net 核心控制台应用程序引用 .net 标准 2.0 库中的 dll 时出错