【问题标题】:WCF HTTP Headers Using HttpRequestMessageProperty and OperationContextScope使用 HttpRequestMessageProperty 和 OperationContextScope 的 WCF HTTP 标头
【发布时间】:2011-08-26 03:43:16
【问题描述】:

我意识到这是一个被反复询问的问题,但我找不到可以查看的“陷阱”列表。

我正在编写一个 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 标头可能发生了一些特定的事情,但即使是其他标头也没有遇到。有什么想法吗?接下来我应该看哪里?

【问题讨论】:

    标签: c# wcf header


    【解决方案1】:

    【讨论】:

    • 功能上有区别吗?
    • 你是什么意思?检查器接口在执行期间由 WCF 运行时调用并获取所有需要的信息,并且可以执行您需要它们执行的任何操作,甚至在发送/接收之前更改数据本身...
    • 但这与使用 OperationContextScope 有什么区别?根据我的阅读,他们完成了同样的事情。
    • 理论上是的——但我怀疑不同之处在于与运行时的交互是如何发生的......检查器界面被称为“执行中”,这意味着所有上下文都是本地的......您使用的方法可能会受到某种争用,例如在多线程情况下......因此要在右侧 100% 使用检查器方法
    • 该博客文章中最近的 cmets 表明这种方法在 .NET 4 中可能不再适用。版本之间肯定发生了一些变化......
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2012-10-22
      相关资源
      最近更新 更多