我有一个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
感谢您的帮助。
答案 0 :(得分:1)
您需要做的是动态创建WCF端点,而不是使用web.config上的配置。通过这种方式,您可以在所需的URL中托管WCF地址。您有MSDN文档在此处执行此操作:How to: Create a Service Endpoint in Code
您可能还必须忽略MVC / Web API的路由配置代码中的路由。