gpt4 book ai didi

asp.net-mvc - 在 MVC2 站点中托管 WCF

转载 作者:行者123 更新时间:2023-12-02 18:13:29 25 4
gpt4 key购买 nike

我们有一个非常大、复杂的 MVC2 网站。我们想要为一些内部工具添加 API,并决定使用 WCF。

理想情况下,我们希望 MVC 本身托管 WCF 服务。原因包括:

  • 尽管应用程序有多个层级,但我们希望 API 中的某些功能需要网站本身(例如,设置电子邮件格式)。
  • 我们使用 TFS 进行自动构建(持续集成)和部署 - 我们需要修改的构建和发布机制越少越好
  • 我们在整个应用程序中使用 Unity 容器和控制反转。作为网站的一部分,我们可以重用配置类和其他辅助方法。

我编写了一个自定义 ServiceBehavior,它又具有一个自定义 InstanceProvider - 这允许我实例化和配置一个容器,然后使用该容器为来自 WCF 的类实例的所有请求提供服务。

所以我的问题是;是否可以从 MVC 本身托管 WCF 服务?

我之前只有服务/标准 Asp.Net 网站的经验,并且没有意识到 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 找到元数据code> 但是,两者都给出了 404 - 据我所知,没有明显迹象表明 WCF 正在运行。我是否需要对我的路线做一些事情?

注意:如果其他人遇到此问题,我必须将 routes.IgnoreRoute("{MyJob}.svc/{*pathInfo}") 添加到路线在 Global.asax 中进行设置以防止 MVC 拦截调用。

最佳答案

是的,这是可能的。我在我的项目中使用它并且很高兴。

要将 WCF 服务添加到您的项目中,您需要添加新项目 Ctrt+Shift+A 并选择“WCF 服务”。通过这种方式,将添加简单的 WCF 服务并修改 web.config。可能需要修改创建的 SVC 文件,例如使用“System.ServiceModel.Activation.WebServiceHostFactory”。从 .NET 4.0 开始,您可以删除 SVC 文件并使用 <serviceActivation>而是使用相同的信息。例如,

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true">
<serviceActivations>
<add relativeAddress="My.svc"
service="MyNamespace.MyClass"
factory="System.ServiceModel.Activation.WebServiceHostFactory" />
</serviceActivations>
</serviceHostingEnvironment>

一点小意见。如果您从 MVC 内部调用某些 WCF 方法,则需要使用 HttpContext.Current而不是WebOperationContext.Current 。我总是在 WCF 代码中测试 if WebOperationContext.Current == NULL ,然后使用HttpContext.Current .

关于asp.net-mvc - 在 MVC2 站点中托管 WCF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com