使用 HttpRequestMessageProperty 和 OperationContextScope 的 WCF HTTP 标头
我意识到这是一个被反复问到的问题,但我找不到可以查看的“陷阱”列表。
我正在编写一个 WCF 客户端,该客户端将使用 SAP Web 服务,在 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 标头可能发生了一些特定的情况,但即使是其他标头也没有出现。有什么想法吗?接下来我该看哪里?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于此类内容,您应该实现
IClientMessageInspector
- 有关一些示例代码,请参阅http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspx另请参阅(更新) :
For this kind of stuff you should be implementing
IClientMessageInspector
- for some sample code see http://msmvps.com/blogs/paulomorgado/archive/2007/04/27/wcf-building-an-http-user-agent-message-inspector.aspxSee also (more current):
所以,这个问题与我们的预期有很大不同。我仍在尝试寻找解决方案,但至少我知道根本原因:
我无法发送 HTTP cookie 来验证我的请求;我们的 SAP 服务使用 MYSAPSSO2 令牌(HTTP cookie)进行身份验证。当尝试使用 WCF 连接到启用可靠会话的 SAP Web 服务时,我们的 cookie 不会预先发送。
我们正在寻找一种方法来构建可以使用 HTTP cookie 的自定义身份验证提供程序。
So, this issue was a lot different than we were expecting. I am still trying to find a fix, but at least I know root cause:
I am unable to send HTTP cookies to authenticate my requests; our SAP services use a MYSAPSSO2 token (HTTP cookie) for authentication. When trying to use WCF to connect to a Reliable Session-enabled SAP web service, our cookies don't get sent up front.
We are looking for a way to build a custom authentication provider that can use HTTP cookies.