解决WCF应用程序中的PlatformNotSupportedException错误

在处理客户服务器上的问题时,遇到了一个著名的错误消息:

System.PlatformNotSupportedException: Operation is not supported on this platform.

这种错误通常出现在WCF应用程序中,表明ServiceHost无法启动。特别是,当调用以下代码时,会抛出异常:

C# ServiceHost host = new ServiceHost(typeof(MyWCFService)); host.Open();

通常,首先要检查ServiceHost绑定的端口是否可用。如果可能,尝试使用不同的端口。之后,检查应用程序是否以具有管理员权限的账户运行,并且没有防病毒软件或防火墙阻止端口。同时检查Windows Process Activation Service和WCF Activation功能是否已在机器上安装:

从控制面板 > 管理工具 > 服务,检查Windows Process Activation Service是否确实正在运行:

根据经验,上述步骤大多数时候可以解决问题,因为问题通常是由于缺乏管理员权限和/或机器上缺少WCF组件。如果错误消息仍然存在,就像情况一样,那是因为ServiceHost无法加载运行.NET应用程序的HTTP监听器所需的HTTP系统驱动(http.sys),很可能是因为驱动缺失或已被禁用。

在Windows 7和Windows Server 2008中,在设备管理器中有一个名为“非即插即用驱动程序”的类别显示http.sys和其他各种系统驱动程序。这个类别默认是隐藏的,只能通过选择“查看”>“显示隐藏设备”来显示:

打开HTTP驱动程序的属性对话框,很可能会发现它的启动类型已被设置为“禁用”。要解决PlatformNotSupportedException问题,请将其更改为“需求”并重新启动计算机:

在Windows 8和Windows Server 2012中,即使选择显示隐藏设备,设备管理器也不会显示非即插即用条目。要设置启动类型,请转到注册表分支HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP并检查Start键的DWORD值。值为4意味着驱动程序已被禁用。要配置HTTP驱动程序按需加载,请将Start设置为3并重新启动计算机。现在,WCF应用程序应该能够无问题地打开ServiceHost。

在处理这类问题时,了解错误的根本原因是至关重要的。PlatformNotSupportedException通常与系统驱动程序或服务的配置有关。在Windows操作系统中,http.sys是负责处理HTTP请求的系统驱动程序,如果它被禁用或未正确配置,那么依赖于它的应用程序,如WCF服务,将无法正常工作。

要解决这个问题,需要确保http.sys驱动程序是可用的,并且设置为按需启动。这可以通过设备管理器或注册表编辑器来完成。在Windows 7和Windows Server 2008中,可以通过设备管理器直接访问和修改这些设置。然而,在Windows 8和Windows Server 2012及更高版本中,需要使用注册表编辑器来更改这些设置。

在修改系统设置之前,建议创建系统还原点或备份注册表,以防出现意外情况。修改注册表之前,确保了解每个键值的作用,以及如何正确地进行更改。错误的更改可能会导致系统不稳定或无法启动。

一旦http.sys驱动程序被设置为按需启动,WCF应用程序应该能够正常打开ServiceHost,并且不会再遇到PlatformNotSupportedException错误。如果问题仍然存在,可能需要进一步检查应用程序的配置,或者考虑是否有其他系统服务或驱动程序与WCF服务冲突。

在解决这类问题时,耐心和细致的检查是关键。系统日志和错误消息可以提供宝贵的线索,帮助确定问题的根源。此外,查阅微软的官方文档和社区论坛也可以提供有用的信息和解决方案。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485