使用HttpRequestMessageProperty和OperationContextScope的WCF HTTP标头

时间:2011-08-23 17:22:29

标签: c# wcf header

我意识到这是一个一次又一次被问到的问题,但是我找不到一个我可以看一看的“陷阱”清单。

我正在编写一个将使用SAP Web服务的WCF客户端,在我的web.config中使用customBinding,其allowCookies设置为false并支持启用可靠会话。我正在设置我的HTTP标头如下:

var authCookie = new System.Net.Cookie();
var wcfClient = new SomeWcfClient();
using (var context = new OperationContextScope(wcfClient.InnerChannel))
{
    var cookies = new CookieContainer();
    cookies.Add(authCookie);
    var endPoint = new EndpointAddress("http://someDomain.test/");

    var httpRequest = new System.ServiceModel.Channels.HttpRequestMessageProperty();
    OperationContext.Current.OutgoingMessageProperties.Add(System.ServiceModel.Channels.HttpRequestMessageProperty.Name, httpRequest);
    httpRequest.Headers.Add(HttpRequestHeader.Cookie, cookies.GetCookieHeader(endPoint.Uri));

    wcfClient.PerformOperation();
}

当我使用Fiddler时,我的HTTP标头没有出现。我也试过创建虚拟Referer和User-Agent标题,认为我的cookie标题可能发生了特定的事情,但即使是那些其他标题也没有出现。有什么想法吗?我应该在哪里看下一个?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

所以,这个问题与我们预期的有很大不同。我仍在努力寻找解决办法,但至少我知道根本原因:

我无法发送HTTP Cookie来验证我的请求;我们的SAP服务使用MYSAPSSO2令牌(HTTP cookie)进行身份验证。尝试使用WCF连接到支持可靠会话的SAP Web服务时,我们的cookie不会预先发送。

我们正在寻找一种方法来构建可以使用HTTP cookie的自定义身份验证提供程序。