HTTPHandler和svc

时间:2012-04-17 11:36:33

标签: wcf routing httphandler svc

我有一个现有的Web应用程序,它安装在多台机器上。脚本客户端和.net客户端通过一台机器使用“.asmx”服务,将所有呼叫路由到其他机器。

客户端----> |网站\虚拟目录(HttpHandler)| ----> |其他服务器\ real .asmx |

我添加了一个新的.svc服务,该服务执行相同的功能,并为其添加了一个处理程序(目录的配置):

<system.webServer>
<handlers>
  <add name="MY_ASMX" verb="*" path="*.asmx" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_ASPX" verb="*" path="*.aspx" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_WSDL" verb="*" path="*.wsdl" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />
  <add name="MY_SVC" verb="*" path="*.svc" type="MY.AO.HttpProxy, Astea.AO.HttpProxy" resourceType="Unspecified" preCondition="integratedMode" />

当asmx请求路由正常时,终端服务器上的新.svc不会被调用,甚至Httphandler也被跳过。如果我直接在另一台机器上调用.svc就可以了。

我得到的错误是:

WebHost failed to process a request.
Sender Information: System.ServiceModel.Activation.HostedHttpRequestAsyncResult/26458746
 Exception: System.Web.HttpException (0x80004005): The service '/Mysite/MyDirectory/settings.svc' does not exist. ---> System.ServiceModel.EndpointNotFoundException: The service '/Mysite/MyDirectory/settings.svc' does not exist.

我已经尝试了下面的

  1. 将“buildProviders”添加到删除.svc
  2. 的编译部分
  3. 点击MimeTypes并输入“.svc”和“application / octet-stream”并保存
  4. 添加处理程序:
  5. 没有任何帮助,http处理程序没有被调用

    P.S。我正在使用AppPool .net 4.0集成

2 个答案:

答案 0 :(得分:1)

.svc扩展默认被视为WCF服务,并且已经存在处理程序/模块。您可以通过在<add>元素前添加元素来删除现有的处理程序/模块:

<remove name="svc-ISAPI-4.0_32bit" />

(或者,如果在win64上:):

<remove name="svc-ISAPI-4.0_64bit" />

并且,在<modules>元素中:

<remove name="ServiceModel-4.0" />

答案 1 :(得分:1)

我找到了。添加:

<compilation debug="true" >
  <buildProviders>
    <remove extension=".svc"/>
  </buildProviders>
</compilation>

导致错误,让我第一次退缩: “〜/ ServiceManagement.svc”要求“.svc”的buildProvider将在

安装MS AppFabric时,在机器根配置中自动创建“〜/ ServiceManagement.svc”。因为我只使用该文件夹进行重定向,所以我不需要Appfabric,所以我将其删除了:

<system.serviceModel>
<serviceHostingEnvironment>
  <serviceActivations>
    <remove relativeAddress="~/ServiceManagement.svc"/>
  </serviceActivations>
</serviceHostingEnvironment>