Spring.NET и WCF WebHttp Services - PullRequest
       54

Spring.NET и WCF WebHttp Services

1 голос
/ 15 ноября 2011

Я исследую использование WCF WebHttp Services от Microsoft для создания RESTful API.В прошлом был WCF REST Starter Kit для .NET 3.5, который теперь, кажется, был заменен на WCF REST Service Template 40 в .NET 4.

Конечно, я хочу использовать DI Spring.NET, ноКажется, я не могу найти в Интернете никаких ресурсов, объясняющих, как успешно интегрировать Spring.NET в WCF 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

Кто-нибудь знает ресурс или некоторую дополнительную документацию для достижения этого?Кто-нибудь уже делал это?

Ответы [ 3 ]

3 голосов
/ 21 января 2012

Я просто должен был сделать то же самое сам, мне пришлось расширить фабрику хостов 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>
2 голосов
/ 21 ноября 2011

Попробуйте что-нибудь подобное и дайте мне знать:

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

(вам нужна ссылка на Spring.Services, чтобы использовать Spring.ServiceModel.Support.ServiceProxyTypeBuilder класс)

0 голосов
/ 18 января 2012

Поскольку WCF WebHttp Services, кажется, прекращено, я больше не расследовал.

Преемником будет WCF Web API , который автоматически разрешает интеграцию Spring.NET с использованием простого старого приложения MVC3 в качестве основного проекта.WCF Web API в данный момент находится в состоянии предварительного просмотра, и ожидается, что кандидат на релиз появится примерно в феврале 2012 года.

Я бы предложил использовать эту совершенно новую и очень мощную среду REST.Но помните о риске при интеграции с экспериментальным программным обеспечением!Он все еще находится в бета-версии, и никто точно не может предсказать, когда он будет наконец выпущен и какие из текущих функций все еще будут частью релиза.Работа над структурой BETA может повлиять на график вашего проекта.

...