WebOperationContext.Current.OutOngonResponse.Header停止使用自定义IDISPATCHMESSAGEFORMATERTARTE
我有自定义 idisPatchMessageFormatter
注册
public class JsonOperationBehavior : IOperationBehavior
{
public void AddBindingParameters(OperationDescription operationDescription, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
}
public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
dispatchOperation.Formatter = new JsonFormatter(operationDescription, dispatchOperation.Formatter);
}
public void Validate(OperationDescription operationDescription)
{
}
}
public class JsonFormatter : IDispatchMessageFormatter
{
readonly OperationDescription _operationDescription;
readonly IDispatchMessageFormatter _originalFormatter;
public JsonFormatter(OperationDescription operationDescription, IDispatchMessageFormatter originalFormatter)
{
_operationDescription = operationDescription;
_originalFormatter = originalFormatter;
}
public void DeserializeRequest(Message message, object[] parameters)
{
parameters[0] = JsonHelper.DeserializeObject(GetRequestType(), WebServiceHelper.GetRequestRawStringBody(message));
}
public Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
{
var json = JsonHelper.SerializeObject(GetResponseType(), result);
var bytes = Encoding.UTF8.GetBytes(json);
var replyMessage = Message.CreateMessage(messageVersion, GetResponseAction(), new RawDataWriter(bytes));
replyMessage.Properties.Add(WebBodyFormatMessageProperty.Name, new WebBodyFormatMessageProperty(WebContentFormat.Raw));
return replyMessage;
}
private Type GetRequestType()
{
return _operationDescription.Messages[0].Body.Parts.Last().Type;
}
private Type GetResponseType()
{
return (_operationDescription.SyncMethod ?? _operationDescription.EndMethod).ReturnType;
}
private string GetResponseAction()
{
return _operationDescription.Messages[1].Action;
}
}
每个事物看起来都正确,但我指出,在
WebOperationContext.Current.OutgoingResponse.Headers.Add(name, value);
停止工作之前工作的其他地方,没有显示新的标题。
但是随后,我将代码添加在 serializereply
中,例如:
_ = _originalFormatter.SerializeReply(messageVersion, parameters, result);
即使我不使用此功能的结果,标题也会再次工作。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在查看了WCF的源代码之后:
nnnb1 refence n N.NN N N.NN N.N N.N.NN N.N.NN NN) https://referencesource.microsoft.com/#servicemodel.web/system/servicemodel/dispatcher/multiplexiplexipingdispatchmessageformatter.cs,43219486eb5aa.b5aa.8b1 references /
全部归结为:
WebOperationContext.Current.OutOnginResponse.headers 需要正确的工作。
After looking source code of WCF:
https://referencesource.microsoft.com/#System.ServiceModel.Web/System/ServiceModel/Dispatcher/MultiplexingDispatchMessageFormatter.cs,43219486eb5aa8b1,references
I look that default
SerializeReply
change global state ;/All boil down to:
Is required for
WebOperationContext.Current.OutgoingResponse.Headers
work correctly.