Я управляю общим файлом cookie авторизации при выполнении вызовов службы WCF с помощью этой методики, описанной в заголовке " Централизованное управление файлами cookie ", расположенном здесь: http://megakemp.com/2009/02/06/managing-shared-cookies-in-wcf/
Я настроил кастом IClientMessageInspector
, IEndpointBehavior
, BehaviorExtensionElement
, работает. Мое поведение конечной точки добавляет инспектор сообщений следующим образом:
public class MyEndpointBehavior : IEndpointBehavior
{
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.ClientRuntime clientRuntime)
{
// yuck.. Wish I had an instance of MyClientMessageInspector
// (which has the auth cookie already) so I could just inject that
// instance here instead of creating a new instance
clientRuntime.MessageInspectors.Add(new MyClientMessageInspector());
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, System.ServiceModel.Dispatcher.EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
Все это работает безупречно , но это решение выходит из строя, если вы хотите поделиться файлами cookie с несколькими клиентами . Поскольку метод ApplyDispatchBehavior()
создает новый экземпляр, любой другой клиент не получит этот экземпляр инспектора сообщений и, следовательно, запрос на авторизацию.
Итак, я подумал о попытке создать собственный конструктор, в который я мог бы вставить экземпляр, например, так:
MyEndpointBehavior(MyClientMessageInspector msgInspector) { ... }
Но WCF нужны конструкторы без параметров. Проползая через интернет, WCF имеет хуки, позволяющие внедрять зависимости, создавая IInstanceProvider
, IServiceBehavior
и т. Д. Но я не думаю, что это то, что я ищу здесь.
Может ли кто-нибудь помочь мне в правильном направлении?