У меня есть приложение 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
, но безрезультатно.
Я не использую конфигурационный файл, так как я в основном экспериментирую, не разрабатываю реальные приложения, но мне нужно изучить случай. Но если вы думаете, что я могу достичь того, что мне нужно, только с помощью конфигурационных файлов, тогда хорошо, я буду их использовать.
При необходимости я предоставлю подробности исключений для каждой комбинации настроек, я опускаю их, чтобы сообщение не было слишком большим. Любые идеи о том, что я могу сделать?