阻止HttpHandler处理WCF请求
我有一个承载WCF服务和HttpHandler的网站。当我打开aspNetCompatibilityEnabled时,HttpHandler开始接收我的WCF请求。我认为这不会发生,因为它有一个.svc扩展名,并且处理程序没有配置为处理.svc文件。处理程序注册为:阻止HttpHandler处理WCF请求,wcf,httphandler,Wcf,Httphandler,我有一个承载WCF服务和HttpHandler的网站。当我打开aspNetCompatibilityEnabled时,HttpHandler开始接收我的WCF请求。我认为这不会发生,因为它有一个.svc扩展名,并且处理程序没有配置为处理.svc文件。处理程序注册为: <system.webServer> <handlers> <add name="TTPDeploy" path="*.deploy" verb="
<system.webServer>
<handlers>
<add name="TTPDeploy" path="*.deploy" verb="*" type="ServiceHost.DeploymentHandler" resourceType="Unspecified" preCondition="integratedMode" />
<add name="TTPManifest" path="*.manifest" verb="*" type="ServiceHost.DeploymentHandler" resourceType="Unspecified" preCondition="integratedMode" />
<add name="TTPApplication" path="*.application" verb="*" type="ServiceHost.DeploymentHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
</handlers>
</system.webServer>
我确信这仅仅是因为我不了解WCF和HttpHandler的某些内容。想法
更新 我最终以另一种方式解决了这个问题。因为当aspNetCompatibilityEnabled设置为true时,我无法使我的WCF请求工作,所以我将其恢复为false 我的核心问题是,我需要通过一个WCF调用从获取指向web的物理文件路径。我发现另一篇文章(我现在找不到)说,当使用WCF获取物理应用程序路径时,应该使用
HostingEnvironment.ApplicationPhysicalPath
。这是一个更直接的解决问题的方法,但仍然不能回答这个问题
为什么我的处理程序在未注册到.svc文件的情况下拾取我的WCF请求?IIS正在拾取请求,因为某些配置可能位于machine.config中 要允许请求到达处理程序,请将以下内容添加到web.config文件中:
<compilation>
<buildProviders>
<remove extension=".svc" />
</buildProviders>
</compilation>
在Windows app/NT服务中自行托管您的WCF服务-您将不会遇到这些问题……不幸的是,这不是一个选项,因为我需要IIS提供的开箱即用的灵活性/可配置性(尽管与此灵活性相关的一些问题).自托管时有什么灵活性是您所没有的?如果您只谈到WCF,那么我就没有什么理由可以说了,但我还需要处理来自ClickOnce应用程序的其他web请求,据我所知,这些请求需要由IIS托管。单击一次将使用此网站作为更新源,HttpHandler将用于接收和响应这些请求。因为我已经必须使用IIS,所以我也可以在那里托管我的WCF服务,以避免也必须安装windows服务。不,machine.config中没有任何内容。我仍然需要该网站来响应WCF请求,因此从构建提供程序中删除.svc扩展将是一个坏主意,对吗?本质上,我希望我的WCF和处理程序都能响应请求。我不认为两个处理程序可以处理同一个请求。一旦一个处理程序接收到请求,其他处理程序就无法再使用它了。同意,但我不会尝试用两个处理程序处理一个文件。我试图用两个不同的处理程序处理两种不同的文件类型(即application和.svc)。