MVC5和WebAPI自定义路由与WCF

时间:2015-06-24 03:45:45

标签: asp.net-mvc wcf asp.net-web-api routing asp.net-web-api-routing

我有一个MVC5应用程序,它充当框架并使用插件来扩展功能。每个插件都是自己的MVC5 / WebAPI项目,我的框架项目配置为动态安装插件并检索嵌入资源。

我的问题是每个插件都可以有WCF Web服务,WebAPI端点和标准MVC控制器。例如,我的目录结构可能是:

MyFramework
    Resources
    Controllers (my framework level controllers)
    Plugins
        CoolNewPlugin
             Services
                 CoolService.svc
             Controllers
                CoolAPIController
        OtherPlugin
             Controllers
                OtherAPIController
        CollectionOfPlugins
             AnotherPlugin
                Services
                    AnotherWCFService.svc
        etc....

我的目标是提供以下路线:

/ API / REST / {插件} / {控制器} / {动作}

/ API / SOAP / {插件} /Services/Servicename.svc

基本上我想从试图使用Web服务(SOAP或REST)的最终用户隐藏应用程序目录结构的复杂性。

我认为我使用自定义IHttpControllerSelector处理的REST。

问题是WCF服务端点。它们是在每个插件内部独立定义的(每个插件都有自己的服务所使用的web.config文件),因此我不能修改该元素以支持其他地址。

在上面的示例中,SOAP Service端点目前看起来像:

http://example.com/plugins/CoolNewPlugin/Services/CoolService.svc

http://example.com/plugins/CollectionOfPlugins/AnotherPlugin/Services/AnotherWCFService.svc

我想要的是:

http://example.com/api/SOAP/CoolNewPlugin/Services/CoolService.svc

http://example.com/api/SOAP/AnotherPlugin/Services/AnotherWCFService.svc

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您需要做的是动态创建WCF端点,而不是使用web.config上的配置。通过这种方式,您可以在所需的URL中托管WCF地址。您有MSDN文档在此处执行此操作:How to: Create a Service Endpoint in Code

您可能还必须忽略MVC / Web API的路由配置代码中的路由。