Spring.NET和WCF WebHttp服务

时间:2011-11-15 14:52:58

标签: wcf rest spring.net webhttp

我正在调查使用Microsoft的WCF WebHttp Services创建RESTful API。在过去,.NET 3.5有WCF REST Starter Kit,现在似乎已被.NET 4中的WCF REST Service Template 40取代。

当然我想使用Spring.NET的DI,但我似乎无法在网上找到任何解释如何将Spring.NET成功整合到WCF WebHttp Services中的资源。

我确实知道get Spring into my conventional WCF Services非常“有趣”的方式,但是有谁知道如何将Spring.NET与WCF WebHttp Services集成?

有些人感兴趣的一些细节:

  • WCF WebHttp Services我有一个global.asax就像在MVC中一样,我可以在那里注册路线和东西。
  • 这个Global继承自HttpApplication,就像好的SpringMvcApplication一样。
  • 虽然路线看起来有点不同:

    RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), typeof(MyService)));
    

我会假设有两种方法可以将Spring挂钩:

  1. Global继承一些Spring类而不是HttpApplication
  2. 注册路线时,请使用ServiceHostFactory
  3. 提供的自定义Spring.NET

    有没有人知道有关实现此目的的资源或其他文档?有没有人这样做过?

3 个答案:

答案 0 :(得分:3)

我必须自己做同样的事情,我不得不扩展web api http主机工厂。

在此处查找详细信息:Spring.NET WCF Web API

但总之这样做:

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中:

<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>

答案 1 :(得分:2)

尝试类似的事情让我知道:

RouteTable.Routes.Add(new ServiceRoute("MyService", new WebServiceHostFactory(), 
new ServiceProxyTypeBuilder("MyServiceNameInSpringConfigFile", ContextRegistry.GetContext(), true).BuildProxyType()));

(您需要引用Spring.Services才能使用Spring.ServiceModel.Support.ServiceProxyTypeBuilder类)

答案 2 :(得分:0)

由于WCF WebHttp Services似乎已经停止,我没有进一步调查。

Successor将WCF Web API自动允许使用普通的旧MVC3应用程序作为主项目进行Spring.NET集成。 WCF Web API目前处于预览状态,预计将在2012年2月左右获得候选版本。

我建议使用这个全新且非常强大的REST框架。但是要注意与实验软件集成时的风险!它仍然在BETA中,没有人可以预测,什么时候最终会发布,哪些当前功能仍然是发布的一部分。使用BETA框架可能会影响项目的时间表。