Wcf 当routePrefix是路径时,ServiceRoute不工作

Wcf 当routePrefix是路径时,ServiceRoute不工作,wcf,model-view-controller,routing,svc,Wcf,Model View Controller,Routing,Svc,当我尝试在以下地址访问我的WCF服务时,它工作正常: http://localhost/webservices/main.svc 太好了。但我希望能够通过以下方式调用此服务: http://localhost/api/main 因此,我试图在MVC中的RouteConfig定义中加入正确的ServiceRoute。当routePrefix变量是单数时,我能够使路由工作。但是如果routePrefix是一条路径,比如在我的例子中,我想将一条路径映射到~/api/main,那么我就无法让它工作

当我尝试在以下地址访问我的WCF服务时,它工作正常:

http://localhost/webservices/main.svc
太好了。但我希望能够通过以下方式调用此服务:

http://localhost/api/main
因此,我试图在MVC中的RouteConfig定义中加入正确的ServiceRoute。当routePrefix变量是单数时,我能够使路由工作。但是如果routePrefix是一条路径,比如在我的例子中,我想将一条路径映射到~/api/main,那么我就无法让它工作

我在谷歌搜索过,这个问题并不常见。我非常希望完成类似于先前发布的关于此主题的问题的公认答案中所述的内容:

我还尝试实现此处建议的路由约束:

但仍然会出现以下错误:

No HTTP resource was found that matches the request URI 'http://localhost/api/main'.
No type was found that matches the controller named 'main'.
以下是我迄今为止所做的尝试:

Imports System.Web.Mvc 
Imports System.Web.Routing 
Imports System.ServiceModel.Activation
Imports MyServiceLibrary

Public Class RouteConfig
    Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
       [..other routing stuff...]

       routes.Add(New ServiceRoute("api/main", New ServiceHostFactory(), _
           GetType(MyServiceLibrary.main)))

       routes.MapRoute("Default", "{controller}/{action}/{id}", New With { _
            Key .controller = "Default1", _
            Key .action = "Index", _
            Key .id = UrlParameter.Optional}, _
            New With {Key .controller = "^(?!main).*"})


       [..other routing stuff...]
    End Sub
End Class
我似乎想不出这个问题的解决办法

编辑2:

当我第一次发布这个问题时,我发现VB语法的格式有问题

原始错误语法:

routes.Add(new ServiceRoute("api/main", new ServiceHostFactory(), _
              typeof(MyServiceLibrary.main)))
正确的vb语法应为:

routes.Add(New ServiceRoute("api/main", New ServiceHostFactory(), _
           GetType(MyServiceLibrary.main)))
注意,在VB中应该使用GetType而不是typeof。解决这一问题是向前迈出的一大步,但并没有解决根本问题

编辑3:

事实证明,如果我按如下方式修改ServiceRoute,那么它就可以工作了:

routes.Add(New ServiceRoute("main", New ServiceHostFactory(), _
           GetType(MyServiceLibrary.main)))
所以,问题是如何创建我想要的路由“api/main”

编辑4:

我想我可能在这里找到了解决办法:


那里的解决方案主要实现WebServiceHostFactory而不是ServiceHostFactory。我试过了,但对我不起作用

您应该将wcf服务类型作为类型传入。这是在web.config文件中定义的服务

请看这一页:

Ok我从web.config的服务部分添加了一个代码片段(请参见编辑1)。您指的是服务的名称“MyServiceLibrary.main”?它对您有用吗?如果没有-你会得到什么错误?没有不起作用。在上面的“编辑1”下,我将收到的intellisense错误放在下面。你好,Jocke,谢谢你的反馈。看起来我的VB语法不好,我已经修复了。看到我在“编辑2”下写的了吗?不知道为什么你的问题被否决了。MSDN文档和用于Web API的ASP.Net文档都很糟糕,甚至比不上一开始就没有任何文档的帮助。只有死巷。。。