我意识到这是一个一次又一次被问到的问题,但是我找不到一个我可以看一看的“陷阱”清单。
我正在编写一个将使用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标题可能发生了特定的事情,但即使是那些其他标题也没有出现。有什么想法吗?我应该在哪里看下一个?
答案 0 :(得分:3)
对于这类内容,您应该实施IClientMessageInspector
- 对于一些示例代码,请参阅http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspx
另见(更新):
答案 1 :(得分:1)
所以,这个问题与我们预期的有很大不同。我仍在努力寻找解决办法,但至少我知道根本原因:
我无法发送HTTP Cookie来验证我的请求;我们的SAP服务使用MYSAPSSO2令牌(HTTP cookie)进行身份验证。尝试使用WCF连接到支持可靠会话的SAP Web服务时,我们的cookie不会预先发送。
我们正在寻找一种方法来构建可以使用HTTP cookie的自定义身份验证提供程序。