1

我正在研究使用 MicrosoftWCF WebHttp Services来创建 RESTful API。过去有WCF REST Starter Kitfor .NET 3.5,现在似乎已被WCF REST Service Template 40.NET 4 取代。

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

我确实知道让 Spring 进入我的传统 WCF 服务的非常“有趣”的方式,但是有谁知道如何将 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提供的自定义Spring.NET

有谁知道实现这一目标的资源或一些额外的文档?有人已经这样做了吗?

4

3 回答 3

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>
于 2012-01-21T13:29:52.490 回答
2

尝试这样的事情,让我知道:

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

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

于 2011-11-21T10:20:18.553 回答
0

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

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

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

于 2012-01-18T12:02:24.870 回答