Добавьте токен аутентификации в сервисный вызов WCF, используя фабрику каналов - PullRequest
0 голосов
/ 31 октября 2019

Я создал свою фабрику каналов, используя следующее.

var client = GetMyChannelFactory<MyService>();
var myService = client.CreateChannel();
//Add token before this as following method cannot be called by anonymous
var result = myService.GetResult();


internal ChannelFactory<T> GetFirmChannelFactory<T>()
{
    BasicHttpBinding basicHttpBinding = GetBasicHttpBinding();
    string url = "example.com";
    EndpointAddress address = new EndpointAddress(url);
    return new ChannelFactory<T>(basicHttpBinding, address);
}

У меня есть следующий токен, который нужно добавить в заголовок запроса WCF, который я вызываю.

var token = applicationUser.Token.Result;

Я попытался добавить поведение EndPoint, но безуспешно.

Как добавить токен-носитель авторизации в заголовок запроса WCF?

1 Ответ

1 голос
/ 01 ноября 2019

Похоже, вы хотите добавить пользовательские Http-заголовки в конкретный запрос. Обычно есть два способа добавить заголовки HTTP.

Uri uri = new Uri("http://10.157.13.69:16666");
            BasicHttpBinding binding = new BasicHttpBinding();
            ChannelFactory<ITestService> factory = new ChannelFactory<ITestService>(binding, new EndpointAddress(uri));
            ITestService service = factory.CreateChannel();
            using (new OperationContextScope((IClientChannel)service))
            {
                //first method to add HTTP header.
                //HttpRequestMessageProperty request = new HttpRequestMessageProperty();
                //request.Headers["MyHttpheader"] = "myvalue";
                //OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = request;
                OperationContext oc = OperationContext.Current;
                WebOperationContext woc = new WebOperationContext(oc);
                woc.OutgoingRequest.Headers.Add("myhttpheader", "myvalue");
                //invocation, only valid in this request.
                var result = service.GetResult();
                Console.WriteLine(result);
            }

Результат.
enter image description here
Мы должны обратить внимание на то, что запрос наряду с конкретнымиЗаголовок Http действителен только в OperationContextScope. После того, как OperationContextScope освобожден, IE вызов за пределами OperationContextScope не присоединяет конкретный заголовок Http.
Если мы хотим добавить постоянный HTTP-заголовок в каждом запросе, мы могли бы рассмотреть возможность использования интерфейса ниже.
Как добавить собственный заголовок HTTP к каждому вызову WCF?
Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь.

...