C# 计算通过WCF的包(datacontract)的大小?
是否可以计算通过WCF发送的(复杂的)对象(带有dataContract)的大小?我需要的是计算请求和响应对象的大小,我需要在winform应用程序中这样做C# 计算通过WCF的包(datacontract)的大小?,c#,.net,wcf,size,datacontract,C#,.net,Wcf,Size,Datacontract,是否可以计算通过WCF发送的(复杂的)对象(带有dataContract)的大小?我需要的是计算请求和响应对象的大小,我需要在winform应用程序中这样做 我可以将对象序列化,然后获得总大小吗?我认为消息拦截器会有所帮助,您可以将此端点行为添加到端点并处理httpwebrequest/response 更多信息,谷歌WCF消息拦截器,你会发现很多有用的东西 希望这会有所帮助。您可以使用来跟踪这两条消息,然后您可以看到通过WCF传输的实际消息。但是,这个工具似乎无法获得总大小 可能会有帮助。您可
我可以将对象序列化,然后获得总大小吗?我认为消息拦截器会有所帮助,您可以将此端点行为添加到端点并处理httpwebrequest/response 更多信息,谷歌WCF消息拦截器,你会发现很多有用的东西 希望这会有所帮助。您可以使用来跟踪这两条消息,然后您可以看到通过WCF传输的实际消息。但是,这个工具似乎无法获得总大小
可能会有帮助。您可以自己手动序列化/反序列化对象。下面是一个序列化和获取长度的简单示例
[DataContract(Name = "Person", Namespace = "http://www.woo.com")]
class Person
{
[DataMember()]
public string Name;
[DataMember()]
public int Age;
}
呼叫代码(在控制台应用程序中)
关于自动执行此操作,例如在每次WCF调用中,您可能需要创建自己的,并将其添加到消息中。这不会得到消息的大小,因为WCF会在数据契约通过连接之前将其包装在信封中。在某些情况下,信封可能比邮件大。我完全同意,上面只计算了最初要求的“对象”的大小:)是的,我确实想到了这一点,但正如你所说,它的大小不正确。我不知道消息拦截器的情况,但我还没有找到一种方法来计算通过网络传输的包的实际大小。因此……看来你需要侵入WCF框架?据我所知,WCF没有提供任何方法来监控真实的网络流量。创建自己的绑定元素怎么样?如果使用ssl,数据将被加密。。。所以,我建议您尝试从WCF中找到解决方案…Windows钩子?我很高兴WCF(和所有.net套接字)使用IOCP底层,你可以尝试在这里进行一些黑客攻击。是的,我知道,但很多其他信息都记录在那里,很难遵循流程。我刚刚在博客中介绍了配置。应该很容易看到消息发生了什么。
Person p = new Person();
p.Name = "Sean Cocteau";
p.Age = 99;
DataContractSerializer ds = new DataContractSerializer(p.GetType());
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
ds.WriteObject(ms, p);
// Spit out
Console.WriteLine("Output: " + System.Text.Encoding.UTF8.GetString(ms.ToArray()));
Console.WriteLine("Message length: " + ms.Length.ToString());
}
Console.ReadKey();