ASP.NET WEB API 项目中的 ASMX 服务



使用我们Web API站点的应用程序之一只能使用ASMX Web服务。 我最近将带有 Web 服务的 Web API 项目部署到开发服务器,并尝试使用自动生成的网页测试 Web 服务。

我在 system.web -> webService -> protocols web.config 部分中启用了HttpGetHttpPost,以便使用自动生成的网页进行测试。 浏览到我要测试的方法时,URL 采用以下格式:

https://mydomain.dev.com/MyApp/MyService.asmx?op=MyMethod

当我单击调用按钮时,我收到以下消息:

不知道这样的主机

响应中的 URL 采用以下格式:

https://mydomain.dev.com/MyApp/MyService.asmx/MyMethod

如何配置路由以允许我在启用HttpGetHttpPost协议的情况下使用自动生成的 ASMX 页面进行测试?

不确定,但我认为您需要在 web.config 中为 Web 服务启用HttpGetHttpPost协议。您可以参考此文档:

  <system.web>
    <webServices>
      <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
  <system.web>

更新

必须确保存在用于 asmx 文件的 httpHandler,并且它不会被 httpHandler for Web API 覆盖。然后确保路由未由您的 webapi 路由器映射

,如下所示:
routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");

看到这个问题

为了使用 ASMX Web 服务自动测试工具,我必须创建一个自定义路由处理程序,该处理程序实现IRouteHander接口以将 HTTP POST 映射到相应的 Web 服务。 自定义IRouteHandler将返回 Web 服务的正确IHttpHandler

WebServiceRouteHandler Route Handler

public class WebServiceRouteHandler : IRouteHandler
{
    private readonly string _virtualPath;
    private readonly WebServiceHandlerFactory _webServiceHandlerFactory = new WebServiceHandlerFactory();
    public WebServiceRouteHandler(string virtualPath)
    {
        if (virtualPath == null) throw new ArgumentNullException("virtualPath");
        if (!virtualPath.StartsWith("~/")) throw new ArgumentException("Virtual path must start with ~/", "virtualPath");
         _virtualPath = virtualPath;
    }
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        //Note: can't pass requestContext.HttpContext as the first parameter because that's type HttpContextBase, while GetHandler wants HttpContext.
        return _webServiceHandlerFactory.GetHandler(HttpContext.Current, requestContext.HttpContext.Request.HttpMethod, _virtualPath, requestContext.HttpContext.Server.MapPath(_virtualPath));
     }
}

RouteConfig 中的 RegisterRoutes 方法.cs

routes.Add("MyWebServiceRoute", new Route(
            "path/to/service/method",
            new RouteValueDictionary() { { "controller", null }, { "action", null } }, new WebServiceRouteHandler("~/MyWebService.asmx")));

我的实现基于以下博客文章:为具有 ASP.NET 路由的 .asmx Web 服务创建路由

相关内容

  • 没有找到相关文章

最新更新