You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在IIS中托管WCF服务报错:DefaultHttpHandler方法不支持集成管道模式

解决IIS集成管道模式下WCF服务的DefaultHttpHandler错误

这个问题我之前在部署WCF服务的时候也碰到过,折腾了好一会儿才搞定,给你几个可行的解决方案:

方案1:切换应用程序池到经典管道模式

这是最直接的解决办法,因为经典模式模拟了IIS 6的请求处理逻辑,不会触发这个集成模式特有的handler问题:

  • 打开IIS管理器,找到你的WCF服务所在的应用程序池
  • 右键点击应用程序池,选择「高级设置」
  • 在弹出的窗口里,找到「托管管道模式」,把它从「集成」改成「经典」
  • 重启应用程序池和你的WCF服务站点

⚠️ 注意:经典模式可能会影响同一应用程序池下其他ASP.NET应用的行为(比如Session状态、模块执行顺序),如果你的服务器上还有其他应用,要先确认兼容性。

方案2:在集成模式下配置正确的WCF Handler映射

如果不想切换管道模式,可以通过修改web.config让WCF的handler在集成模式下正常工作:

  1. 打开服务项目的web.config,找到<system.webServer>节点
  2. 确保里面包含正确的WCF handler和模块配置:
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
  </modules>
  <handlers>
    <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>
  1. 同时检查<system.serviceModel>节点下的serviceHostingEnvironment配置,确保ASP.NET兼容性设置符合你的需求:
<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>

方案3:重新注册WCF和ASP.NET组件到IIS

如果上面的配置都没问题,可能是WCF组件没有正确注册到IIS的集成模式中:

  • 打开管理员权限的命令提示符
  • 先注册ASP.NET 4.x(根据你的.NET版本调整路径):
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
  • 然后注册WCF组件:
%windir%\Microsoft.NET\Framework\v4.0.30319\ServiceModelReg.exe -i
  • 重启IIS服务(运行iisreset命令)

另外还要确认你的应用程序池使用的.NET版本和WCF服务的目标.NET版本一致,比如服务是.NET 4.8,应用程序池就要选对应的.NET CLR版本。

内容的提问来源于stack exchange,提问作者Robbe

火山引擎 最新活动