我正在调查使用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挂钩:
Global
继承一些Spring类而不是HttpApplication
ServiceHostFactory
Spring.NET
醇>
有没有人知道有关实现此目的的资源或其他文档?有没有人这样做过?
答案 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框架可能会影响项目的时间表。