我正在尝试在Silverlight应用程序中获取自定义响应消息标题。
在服务器端新的MessageHeader添加到响应头:
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("headerName", "headerNS", "The header value"));
我可以在Fiddler看到这个标题:
s:信封[ 的xmlns:S = HTTP://schemas.xmlsoap.org/soap/envelope/ ]
S:头
headerName [xmlns = headerNS] 标题值
但是,我找不到在Silverlight应用程序服务回调中读取标头值的方法:
using (new OperationContextScope(proxy.InnerChannel))
{
var headers = OperationContext.Current.IncomingMessageHeaders;
// headers is null :(
}
是否有人遇到类似问题?
答案 0 :(得分:1)
在Silverlight上的响应中获取SOAP标头并不像应该的那样容易。如果你使用基于事件的回调,那你就不走运了 - 它只是不起作用。您需要使用Begin / End样式的操作调用,如下例所示。
void Button_Click(...)
{
MyClient client = new MyClient();
IClient proxy = (IClient)client; // need to cast to the [ServiceContract] interface
proxy.BeginOperation("hello", delegate(IAsyncResult asyncResult)
{
using (new OperationContextScope(client.InnerChannel))
{
proxy.EndOperation(asyncResult);
var headers = OperationContext.Current.IncomingMessageHeaders;
// now you can access it.
}
});
}
请注意,您无法直接使用生成的客户端(来自slsvcutil / add服务引用),您需要将其强制转换为接口,因为Begin / End方法不会在客户端类上公开(显式实现)。
答案 1 :(得分:0)
要从http请求中获取标头,请尝试使用Client HTTP stack。
这样做的简单方法是注册前缀,例如:
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);