65.9K
CodeProject 正在变化。 阅读更多。
Home

修复运行 Windows Communication Foundation 应用程序时出现的 PlatformNotSupportedException

2023年5月7日

CPOL

2分钟阅读

viewsIcon

2813

如何修复运行 WCF 应用程序时出现的 PlatformNotSupportedException

几天前,当我尝试在客户的服务器上运行一个自定义的 Windows Communication Foundation (WCF) 应用程序时,遇到了以下臭名昭著的错误消息

System.PlatformNotSupportedException: Operation is not supported on this platform.
   at System.Net.SystemWebProxy.GetProxy(Uri destination)

通常,当 WCF 应用程序出现此问题时,表明 ServiceHost 无法启动。特别是,当调用以下代码时会抛出此异常

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

像往常一样,首先要检查 ServiceHost 绑定的端口是否可用。如果可能,尝试使用不同的端口。之后,检查应用程序是否以管理员权限运行,以及是否有防病毒软件或防火墙阻止该端口。还要检查机器上是否安装了 Windows 进程激活服务WCF 激活 功能

wcf_activation_services

控制面板 > 管理工具 > 服务,检查 Windows 进程激活服务 是否正在运行

wcf_service_running

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

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

device_manager_http_sys_non_pnp

打开 HTTP 驱动程序的 属性 对话框,您很可能会看到其 启动 类型设置为 禁用。要修复 PlatformNotSupportedException 异常,将其更改为 按需 并重启机器

http_driver_startup_type_demand

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

© . All rights reserved.