帮助我理解这两者的区别。在我看来,是行动无论你使用的是什么。net应用程序,如WCF、Console、Web等,都可以使用ContextScope,如果你调用任何其他服务,如WCF或基于Java的服务(如果这在ASMX服务的情况下不起作用),可以在任何地方使用它来向传出消息添加头。
如果是这样,为什么我们需要messageinspector在任何客户端添加头?OperationContextScope比messageinspector简单得多。有人能告诉我这两个词的正确用法吗?
客户端的IClientMessageInspector
和服务器端的IDispatchMessageInspector
擅长检查消息体,可能在发送之前修改消息,或者修改接收到的内容。
示例:
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
// Inspect and/or modify the message here
MessageBuffer mb = reply.CreateBufferedCopy(int.MaxValue);
Message newMsg = mb.CreateMessage();
var reader = newMsg.GetReaderAtBodyContents().ReadSubtree();
XElement bodyElm = XElement.Load(reader);
// ...
reply = newMsg;
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
// Something could be done here
return null;
}
}
编写一个行为,以便轻松地将检查器应用到客户端:
public class MyInspectorBehavior : IEndpointBehavior
{
#region IEndpointBehavior Members
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(
new MyMessageInspector()
);
}
public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
{}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{}
public void Validate(ServiceEndpoint endpoint)
{}
#endregion
}
使用行为:
ChannelFactory<IService1> cf =
new ChannelFactory<IService1>(
new BasicHttpBinding(),
"http://localhost:8734/DataService.svc");
cf.Endpoint.Behaviors.Add(
new MyInspectorBehavior()
);
同样的事情可以在服务器端使用IDispatcherMessageInspector完成。
该行为可以使用c#、XML (app.config/web.config)或声明式地放在服务实现上:
[MyServiceInspectorBehavior]
public class ServiceImpl : IService1
{ ...}
OperationContextScope用于处理标题(添加,删除)。
Programming WCF Services,附录B, from Juval Löwy很好地解释了OperationContextScope。Juval的框架,ServiceModelEx帮助使用OperationContextScopes
与GenericContext<T>
类
请参阅Juval公司网站下载:http://www.idesign.net/Downloads
对