【问题标题】:C#: How to get header from WCF response?C#:如何从 WCF 响应中获取标头?
【发布时间】:2018-07-17 10:01:29
【问题描述】:

我尝试从 C# 访问第三方 WCF 服务。它有一个 login 方法,它只返回 true 或 false 作为结果,但如果登录成功,它会返回一个 cookie(使用“Set-Cookie”标头)。

如何获取 cookie?我发现无法访问完整的回复。有没有我可以附加处理程序的事件?消息拦截器只显示消息,而不是标题。

到目前为止的代码:

var binding = new System.ServiceModel.NetHttpBinding(System.ServiceModel.BasicHttpSecurityMode.Transport);
var address = new System.ServiceModel.EndpointAddress("https://host.com/service/webservice.svc");
var svc = new WebSvc.ServiceHostClient(binding, address);     
var res = svc.Login("username", Base64Encode("secret"));

res 在成功登录时为真 => 如何从响应中获取 cookie?

【问题讨论】:

    标签: c# wcf


    【解决方案1】:

    应使用客户端消息检查器 (MSDN)。

    您需要检查AfterReceiveReply 方法的reply 参数。 reply.Header 是回复中所有标题的集合。

    【讨论】:

    • 我试过这个:reply.Header 包含 SOAP 响应的标头,而不是 HTTP 响应。标题是“{w3.org/2003/05/soap-envelope"[...]</Action>}”和“{w3.org/2005/08/addressing">urn:uuid:[...]</RelatesTo>}”。 HTTP 标头将是“Content-Type”、“Set-Cookie”等。
    • 同时,我找到了一个解决方法:因为我只需要调用服务的一个方法,所以可以在没有WCF客户端的情况下工作。我使用 Fiddler 来获取 WCF 客户端发送的请求。然后我将 XML 复制到一个变量中并使用 WebRequest 发送它。对于二进制编码,我使用github.com/GDSSecurity/WCF-Binary-SOAP-Plug-In/blob/master/…。不优雅,但有效。
    猜你喜欢
    • 2013-05-28
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多