uma*_*ais 6 c# wcf header winforms
我正在使用Windows窗体应用程序,并且需要调用WCF服务.我需要在请求发送到服务之前为请求添加标头(授权 - 自定义).我也有一个自定义检查器类.我尝试了以下但不以某种方式调用服务,它返回一个异常.
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
MessageHeader header = MessageHeader.CreateHeader("Authorization", "", "Basic Y19udGk6Q29udGlfQjNTVA==");
OperationContext.Current.OutgoingMessageHeaders.Add(header);
HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty();
httpRequestProperty.Headers.Add("Authorization", "Basic Y19udGk6Q29udGlfQjNTVA==");
httpRequestProperty.Headers.Add(HttpRequestHeader.UserAgent, "Continental");
OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;
sentMessages.Add(request.ToString());
return null;
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过这样一个最简单的方法:
MessageHeader header = MessageHeader.CreateHeader("Authorization", "", "Basic Y19udGk6Q29udGlfQjNTVA==");
request.Headers.Add(header);
Run Code Online (Sandbox Code Playgroud)
但它是相同的,添加了授权标题但它没有到达服务,我怎么知道服务接收到什么标题?当我在请求中手动添加这样的头文件(运行之前)时,我使用SOAP UI和服务响应很好.
最简单的方法是在客户端添加它:
using (MyServ.ServiceClient proxy = new MyServ.ServiceClient())
{
using (new System.ServiceModel.OperationContextScope(proxy.InnerChannel))
{
MessageHeader head = MessageHeader.CreateHeader("Authorization", "http://yournamespace.com/v1", data);
OperationContext.Current.OutgoingMessageHeaders.Add(head);
}
}
Run Code Online (Sandbox Code Playgroud)
并在服务器端检索它:
string auth = OperationContext.Current.IncomingMessageHeaders.
GetHeader<string>("Authorization", "http://mynamespace.com/v1");
Run Code Online (Sandbox Code Playgroud)
我还建议你查看这些文章:
使用wsHttpBinding的WCF服务 - 操作HTTP请求标头