Вы можете создать IClientMessageInspector
/IEndpointBehavior
, чтобы установить это значение следующим образом: (да этот код многословен, но это так, как WCF работает;)
public class AuthorizationHeaderMessageInspector : IClientMessageInspector, IEndpointBehavior
{
object IClientMessageInspector.BeforeSendRequest(ref Message request, IClientChannel channel)
{
HttpRequestMessageProperty prop;
Object obj;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out obj))
{
prop = (HttpRequestMessageProperty)obj; // throws a cast exception if invalid type
}
else
{
prop = new HttpRequestMessageProperty();
request.Properties.Add(HttpRequestMessageProperty.Name, prop);
}
prop.Headers[HttpRequestHeader.Authorization] = "your authorization value here";
return null;
}
void IClientMessageInspector.AfterReceiveReply(ref Message reply, object correlationState)
{
}
void IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(this);
}
void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
void IEndpointBehavior.Validate(ServiceEndpoint endpoint)
{
}
}
Затем, когда вы создаете ваш клиент добавить сообщение инспектор следующим образом:
MemberAccountPortClient clientTransaction = new MemberAccountPortClient ("SERVICE");
clientTransaction.Endpoint.Behaviors.Add(new AuthorizationHeaderMessageInspector());
SearchTransactionResponseType res = clientTransaction.searchTransaction (OBJECT_1, OBJECT_2);
Я считаю, что WCF имеет способ применить IEndpointBehavior
, используя конфигурацию, как хорошо, но я обычно иду прямо кода для этих типов вещей.
Большое спасибо @dana! – Crasher