当routePrefix是路径时,ServiceRoute不起作用

时间:2014-06-01 20:14:13

标签: wcf model-view-controller routing svc

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

http://localhost/webservices/main.svc

大。但我希望能够通过以下方式调用此服务:

http://localhost/api/main

所以我试图在我的MVC中的RouteConfig定义中放入适当的ServiceRoute。当routePrefix变量是单数时,我能够使路由工作。但是当routePrefix它是一个路径时,我无法让它工作,就像在我的情况下,我想将路由映射到〜/ api / main。

我在谷歌周围搜寻,这个特殊问题并不常见。我正在寻求完成类似于以下关于此主题的以前发布的问题的接受答案中所述的内容:

Expose WCF services that belong to an Area in MVC app at a routed path

我还尝试按照此处的建议实施路线约束:http://geekswithblogs.net/michelotti/archive/2010/09/22/wcf-rest-services-inside-mvc-projects.aspx

但仍然会收到以下错误:

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语法格式不正确。

原始的INCORRECT语法:

routes.Add(new ServiceRoute("api/main", new ServiceHostFactory(), _
              typeof(MyServiceLibrary.main)))

CORRECT vb语法应为:

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

请注意,在VB中,您应该使用 GetType 而不是 typeof 。解决这个问题是向前迈出的一大步,但没有解决根本问题。

编辑3:

好吧,如果我修改ServiceRoute如下,那么IT WORKS:

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

所以,问题是如何创建我想要的路线“api / main”......

编辑4:

我以为我可能在这里找到了解决方案:Can a WCF ServiceRoute Route Prefix contain a path value?

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

1 个答案:

答案 0 :(得分:0)

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

看一下这个页面: http://blogs.msdn.com/b/endpoint/archive/2010/01/25/using-routes-to-compose-wcf-webhttp-services.aspx