从Asp.net MVC访问Web服务

从Asp.net MVC访问Web服务,asp.net,asp.net-mvc,web-services,asp.net-mvc-2,Asp.net,Asp.net Mvc,Web Services,Asp.net Mvc 2,我有一个MVC2应用程序,它还包括一个非MVC部分(常规Asp.Net 3.5页面) 我从非MVC页面调用webservice(不是WCF)来填充自动完成 MVC部件和非MVC部件在我的开发人员机器中都可以正常工作 当我在IIS中托管我的应用程序时,我无法访问我的Web服务中的webmethods。我和firebug核实过了,它回来了 The controller for path '/payroll/WS/MVCArch.asmx/JqUiGetEmp' was not found or do

我有一个
MVC2
应用程序,它还包括一个非MVC部分(常规Asp.Net 3.5页面)

我从非MVC页面调用webservice(不是WCF)来填充自动完成

MVC部件和非MVC部件在我的开发人员机器中都可以正常工作

当我在IIS中托管我的应用程序时,我无法访问我的Web服务中的webmethods。我和firebug核实过了,它回来了

The controller for path '/payroll/WS/MVCArch.asmx/JqUiGetEmp' was not found or does not implement IController. '
这里我的虚拟目录名是Payroll。我的非MVC页面位于名为“RepDocs”的文件夹下,该文件夹位于应用程序根目录下。我的Webservice文件夹“WS”也位于应用程序的根目录下。请求是从“RepDocs”文件夹下的非mvc页面发送的

为什么相同的代码在
VSHOST
中工作,而不在
IIS(XP sp3)
中工作?我错过什么了吗

请帮忙

编辑

我已经修改了我的global.asax以排除以下路由

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.IgnoreRoute("WS/{resource}.asmx/{*pathInfo}");
//routes.IgnoreRoute("{*allasmx}", new { allasmx = @".*\.asmx(/.*)?" });
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
现在我得到了这个错误

The HTTP verb POST used to access path '/Payroll/ws/MVCArch.asmx/JqUiGetOffice' is not allowed.
我在Web.config中添加了以下内容

<webServices>
    <protocols>
      <add name="HttpGet"/>
      <add name="HttpPost"/>
      </protocols>
</webServices>


仍然不走运。

您必须忽略到Global.asax.cs中web服务的路由

routes.IgnoreRoute("{*allasmx}", new {allasmx=@".*\.asmx(/.*)?"});

您的部署路径可能错误。请参阅--我检查了路径,wsdl返回正确,这意味着我的服务已启动并正在运行。页面呈现得太正确了。唯一不起作用的是ajax对我的服务的请求。不知何故,该请求最终以controller结束,而controller不应该是,因为该请求来自非mvc页面。使用您的建议后,我得到System.Web.HttpException:不允许使用用于访问路径“/payroll/ws/MVCArch.asmx/JqUiGetOffice”的HTTP动词POST。