Autofac WCF интеграция + сеансы - PullRequest
2 голосов
/ 12 августа 2011

У меня есть приложение ASP.NET MVC 3, которое взаимодействует со службой WCF, которая размещена на фабрике хостов Autofac. Вот несколько примеров кода:

.svc файл:

<%@ ServiceHost 
Language="C#" 
Debug="true"
Service="MyNamespace.IMyContract, MyAssembly" 
Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf" %>

Global.asax проекта службы WCF:

protected void Application_Start(object sender, EventArgs e)
{
    ContainerBuilder builder = new ContainerBuilder();        

    //Here I perform all registrations, including implementation of IMyContract

    AutofacServiceHostFactory.Container = builder.Build();            
}

Конструктор класса прокси-клиента (сторона MVC):

ContainerBuilder builder = new ContainerBuilder();

builder.Register(c => new ChannelFactory<IMyContract>(
    new BasicHttpBinding(),
    new EndpointAddress(Settings.Default.Url_MyService)))
    .SingleInstance();

builder.Register(c => c.Resolve<ChannelFactory<IMyContract>>().CreateChannel())
    .UseWcfSafeRelease();

_container = builder.Build();

Это работает нормально, пока я не хочу, чтобы служба WCF разрешала или требовала сеансы ([ServiceContract(SessionMode = SessionMode.Allowed)] или [ServiceContract(SessionMode = SessionMode.Required)]) и совместно использовала один сеанс со стороной MVC. Я изменил привязку к WSHttpBinding на стороне MVC, но у меня возникают разные исключения в зависимости от того, как я его настраиваю.

Я также пытался изменить AutofacServiceHostFactory на AutofacWebServiceHostFactory, но безрезультатно.

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

При необходимости я предоставлю подробности исключений для каждой комбинации настроек, я опускаю их, чтобы сообщение не было слишком большим. Любые идеи о том, что я могу сделать?

...