【发布时间】:2011-01-13 12:43:54
【问题描述】:
我们有一个非常庞大、复杂的 MVC2 网站。我们想为一些内部工具添加 API,并决定使用 WCF。
理想情况下,我们希望 MVC 本身托管 WCF 服务。原因包括:
- 尽管应用程序有多个层次,但我们希望 API 中的某些功能需要网站本身(例如格式化电子邮件)。
- 我们使用 TFS 自动构建(持续集成)和部署 - 我们需要修改构建和发布机制的次数越少越好
- 我们在整个应用程序中使用 Unity 容器和控制反转。作为网站的一部分,我们可以重用配置类和其他辅助方法。
我编写了一个自定义的 ServiceBehavior,它又具有一个自定义的 InstanceProvider - 这允许我实例化和配置一个容器,然后用于为来自 WCF 的类实例的所有请求提供服务。
所以我的问题是;是否可以从 MVC 本身托管 WCF 服务?
我之前只在服务/标准 Asp.Net 网站方面有过经验,直到我真正尝试将 MVC2 连接到配置中并且什么都没发生之前,我才意识到 MVC2 可能会有所不同。经过一番谷歌搜索,似乎没有很多关于这样做的参考 - 所以我想在这里问一下。
更多详情:
感谢那些回复的人,但我仍然无法正常工作...我当前的配置如下所示:
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true">
<serviceActivations>
<add relativeAddress="Job.svc"
service="MyApplication.WebJobManager"
factory="System.ServiceModel.Activation.WebServiceHostFactory" />
</serviceActivations>
</serviceHostingEnvironment>
<extensions>
<behaviorExtensions>
<add name="WCFDIBehavior" type="MyApplication.Jobs.WCFDIBehaviorExtension, MyApplication.Jobs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<standardEndpoints>
<mexEndpoint>
<standardEndpoint name="WebJobManagerMex" />
</mexEndpoint>
</standardEndpoints>
<behaviors>
<serviceBehaviors>
<behavior name="JobServiceBehavior">
<serviceMetadata />
<WCFDIBehavior />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="" name="MyApplication.Jobs.WebJobManager">
<endpoint binding="basicHttpBinding"
bindingConfiguration="" name="HTTPEndpoint" contract="MyApplication.JobService.Interfaces.IWebJobManager" />
</service>
</services>
</system.serviceModel>
如果有什么明显错误的地方,有人可以告诉我吗?
我期待在http://localhost/MyApplication/Job.svc 找到端点,在http://localhost/MyApplication/Job.svc?mex 找到元数据,但是,两者都给出 404 - 据我所知,没有明显迹象表明 WCF 正在运行。我可能需要对我的路线做些什么吗?
注意:如果其他人有这个问题,我必须在Global.asax 的路由设置中添加routes.IgnoreRoute("{MyJob}.svc/{*pathInfo}"),以防止MVC 拦截调用。
【问题讨论】:
-
哇 1,000 次观看和 2 次点赞?有人愿意告诉我我做错了什么吗?
标签: asp.net-mvc wcf web-services asp.net-mvc-2