Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阻止HttpHandler处理WCF请求_Wcf_Httphandler - Fatal编程技术网

阻止HttpHandler处理WCF请求

阻止HttpHandler处理WCF请求,wcf,httphandler,Wcf,Httphandler,我有一个承载WCF服务和HttpHandler的网站。当我打开aspNetCompatibilityEnabled时,HttpHandler开始接收我的WCF请求。我认为这不会发生,因为它有一个.svc扩展名,并且处理程序没有配置为处理.svc文件。处理程序注册为: <system.webServer> <handlers> <add name="TTPDeploy" path="*.deploy" verb="

我有一个承载WCF服务和HttpHandler的网站。当我打开aspNetCompatibilityEnabled时,HttpHandler开始接收我的WCF请求。我认为这不会发生,因为它有一个.svc扩展名,并且处理程序没有配置为处理.svc文件。处理程序注册为:

<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)。