首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring.NET和WCF WebHttp服务

Spring.NET和WCF WebHttp服务
EN

Stack Overflow用户
提问于 2011-11-15 14:52:57
回答 3查看 1.9K关注 0票数 1

我正在研究如何使用微软的WCF WebHttp Services来创建RESTful API。过去有WCF REST Starter Kit for .NET 3.5,现在似乎已经被.NET 4中的WCF REST Service Template 40所取代。

当然,我想使用Spring.NET的DI,但是我似乎在网上找不到任何资源来解释如何成功地将Spring.NET集成到WCF WebHttp Services中。

我确实知道让Spring进入我的传统WCF服务的“有趣”方法,但是有谁知道如何将Spring.NET与WCF WebHttp Services集成

对谁感兴趣的一些细节:

  • WCF WebHttp Services中,我有一个global.asax,就像MVC中的一样,在那里我可以注册路由和其他东西。
  • 这个Global继承自HttpApplication,就像好的ol‘SpringMvcApplication一样。
  • 不过,一条路线看上去有点不同: RouteTable.Routes.Add(新ServiceRoute("MyService",new WebServiceHostFactory(),typeof(MyService);

我假设有两种可能的方式将Spring连接到其中:

  1. Global继承某个Spring类而不是HttpApplication
  2. 注册路由时,使用Spring.NET提供的自定义Spring.NET

有人知道关于实现这一目标的重新来源或其他文档吗?已经有人做过了吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-21 13:29:52

我只需要自己做同样的事情,我不得不扩展web http主机工厂。

在这里查找详细信息:Spring.NET Web

但简而言之,要这样做:

代码语言:javascript
复制
public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        RouteTable.Routes.Add(new ServiceRoute("Catalog", new SpringHttpServiceHostFactory(), typeof(UnitysCatalogService)));
    }
}

public class SpringHttpServiceHostFactory : HttpServiceHostFactory
{
    private IApplicationContext _applicationContext;

    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        Configuration.CreateInstance = GetInstance;
        Configuration.ReleaseInstance = ReleaseInstance;

        return base.CreateServiceHost(serviceType, baseAddresses);
    }

    private object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request)
    {
        return GetApplicationContext().GetObject(serviceType.Name);
    }

    private void ReleaseInstance(InstanceContext instanceContext, object instance)
    {

    }

    private IApplicationContext GetApplicationContext()
    {
        return _applicationContext ?? (_applicationContext = ContextRegistry.GetContext());
    }
}

在你的web.config中:

代码语言:javascript
复制
<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="file://~/Config/spring-config.xml" />
    </context>
  </spring>
  <!-- .... -->
</configuration>
票数 3
EN

Stack Overflow用户

发布于 2011-11-21 10:20:18

尝试这样的方法让我知道:

代码语言:javascript
复制
RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), 
new ServiceProxyTypeBuilder("MyServiceNameInSpringConfigFile", ContextRegistry.GetContext(), true).BuildProxyType()));

(使用Spring.Services类需要对Spring.ServiceModel.Support.ServiceProxyTypeBuilder的引用)

票数 2
EN

Stack Overflow用户

发布于 2012-01-18 12:02:24

由于WCF WebHttp Services似乎被停用了,我没有做进一步的调查。

后继者将是WCF Web API,它自动地允许使用一个普通的老MVC3应用程序作为主要项目进行Spring.NET集成。WCF Web API目前正处于预览状态,预计将在2012年2月左右获得发布候选人。

我建议使用这个全新的非常强大的REST框架。但是,当与实验软件集成时,要注意风险!它仍然处于测试版,没有人能肯定地预测它何时会最终发布,以及当前的哪些特性仍将是该版本的一部分。使用BETA框架可能会影响项目的时间安排。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8138237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档