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





5.00/5 (1投票)
如何修复运行 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 激活 功能
从 控制面板 > 管理工具 > 服务,检查 Windows 进程激活服务 是否正在运行
根据我的经验,上述步骤通常可以解决问题,因为问题通常是由于缺乏管理员权限和/或机器上缺少 WCF 组件造成的。如果错误消息仍然存在,就像我的情况一样,那是因为 ServiceHost
无法加载 HTTP 系统驱动程序 (http.sys),该驱动程序是 .NET 应用程序运行 HTTP 侦听器所必需的,可能是因为该驱动程序丢失或已被禁用。
在 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
。