我们可以调试WCF和Web客户端之间交换的请求数据和响应数据吗?如果可以,请告诉我如何。 我的实际要求是我希望能够操纵(应用正则表达式/删除空字符)WCF发送的响应。
请告知。
答案 0 :(得分:1)
我为此目的使用IClientMessageInspector
取得了巨大成功。它允许您在继续通过WCF客户端之前查看请求/回复并进行编辑。 MSDN documentation对如何使用它非常清楚,但这里是基本部分(在C#中):
1)实现IClientMessageInspector
的类。您可以使用传递给您的reply
或request
对象进行查看和编辑:
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(
ref Message reply,
object correlationState)
{
Console.WriteLine(
"Received the following reply: '{0}'", reply.ToString());
}
public object BeforeSendRequest(
ref Message request,
IClientChannel channel)
{
Console.WriteLine(
"Sending the following request: '{0}'", request.ToString());
return null;
}
}
2)实现IEndpointBehavior
的类,您将MyMessageInspector
添加到端点行为中:
public class MyBehavior : IEndpointBehavior
{
public void AddBindingParameters(
ServiceEndpoint endpoint,
BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(
ServiceEndpoint endpoint,
ClientRuntime clientRuntime)
{
clientRuntime.MessageInspectors.Add(new MyMessageInspector());
}
public void ApplyDispatchBehavior(
ServiceEndpoint endpoint,
EndpointDispatcher endpointDispatcher)
{
}
public void Validate(
ServiceEndpoint endpoint)
{
}
}
3)最后,像这样将MyBehavior
添加到您的端点(假设您已经配置了客户端和配置文件):
client.Endpoint.Behaviors.Add(new MyBehavior());
这将捕获通过给定客户端端点的所有请求/回复。
答案 1 :(得分:0)
为了拦截并可能调整参数并返回WCF调用的对象,您可以使用IOperationsInvoker和IOperationBehavior的自定义实现。有关此示例以及WCF中的其他可扩展性可能性,请查看以下article。
关于你的问题的另一个概念:标题和文字并不完全匹配。在标题中你编写了Debugging,而在文本中你提到了对返回对象的调整,这不仅仅是一个调试。如果您只想调试参数并返回对象,即查看它们,您可能会发现更适合打开WCF跟踪。