从Asp.net MVC访问Web服务

时间:2012-07-20 12:34:33

标签: asp.net asp.net-mvc web-services asp.net-mvc-2

我有一个MVC2应用程序,其中还包含一个非MVC部分(常规Asp.Net 3.5页)。

我从非MVC页面调用webservice(非WCF)来填充自动填充。

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

当我在IIS中托管我的应用程序时,我无法访问我的webservice中的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>

仍然没有运气。

1 个答案:

答案 0 :(得分:2)

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

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