portable-class-library - 在可移植库 (PCL) 上的 Web 服务调用上发送的消息头

标签 portable-class-library request-headers

我正在尝试将我对 web 服务的所有调用移动到我刚刚创建的可移植类库 (PCL) 以组织和重用我的代码。我的目标框架是适用于 Windows 应用商店应用程序的 .NET; .NET 框架 4.5; Silverlight 4 及更高版本和 WP7 及更高版本。

在我的 Win RT 项目中,我一直在通过实现命名空间 System.ServiceModel.Dispatcher 中可用的 IClientMessageInspector 接口(interface)来设置消息头。但是在我的 PCL 项目中,该接口(interface)以及 System.ServiceModel.Description.IEndpointBehavior 不可用。

因此,我需要了解如何将消息头/服务头附加到来自 PCL 项目的具有这些目标框架的服务调用中。有人有我应该尝试的经验和/或建议吗?

更新

只是为了添加更多信息,我现在尝试创建一个 WP8 项目,并注意到这些接口(interface)也不适用于它。所以 IClientMessageInspector 和 IEndpointBehavior 可能不适用于我的 PCL 项目,因为它的目标是 WP8,它本身就错过了它们。

最佳答案

您应该能够确定 OperationContext 的范围到您要使用的当前客户 channel :

using(var scope = new OperationContextScope(_client.InnerChannel)){
    //More to come
}

现在您已经为客户端 channel 创建了操作上下文,您可以添加传出消息头:
using(var scope = new OperationContextScope(_client.InnerChannel)){
    var header = MessageHeader.CreateHeader("x-client-type", "http://www.myapp.com", "WP8");

    OperationContext.Current.OutgoingMessageHeaders.Add(header);

    //Send message to server
}

之后,您应该能够使用 IncomingMessageHeaders 获取标题。 OperationContext.Current 的属性(property).

这些都是 WCF 服务的核心部分,所以它应该是可用的(希望如此)。

Mono 确实支持 WCF 服务,但您必须检查它们已实现的内容。 EG:也许他们没有 MessageHeader.Create你必须使用 var header = new MessageHeader<string>("x-client-type");var untypedHeader = header.GetUntypedHeader("x-client-type", "http://www.myapp.com");而是创建要添加的标题。

关于portable-class-library - 在可移植库 (PCL) 上的 Web 服务调用上发送的消息头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880841/

相关文章:

.net-4.5 - 您如何在可移植类库中使用 IPrincipal 和 IIdentity?

visual-studio - 创建一个针对 Monodroid 的 PCL

c# - 无法在 Rest 请求中添加日期参数(Rest Sharp)

Apache requestheaders env 变量也很早

c# - 可移植类库简介 78 缺少属性相关的方法/属性

xamarin - Xamarin Studio 中的 PCL 中缺少引用

c# - 反射 : get static property name

linux - 如何在服务器端读取客户端发送的 TLS 证书?

php 没有获取自定义 header (Apache 2.4 + FPM/FastCGI php 7)

Javascript 不会设置在 XHR 响应中收到的 httpcookie