gpt4 book ai didi

wcf - 以二进制方式序列化 WCF 消息,而不是作为 SOAP 消息

转载 作者:行者123 更新时间:2023-12-03 13:42:58 29 4
gpt4 key购买 nike

我有一个客户端-服务器应用程序,它使用 WCF 进行通信,并使用 NetDataContractSerializer 序列化对象图。

由于服务器和客户端之间传输了大量数据,因此我尝试通过微调数据成员的大小来减小其大小(例如将 int 更改为 short,long 更改为 int 等)。

调优后发现,传输的数据量并没有改变!问题是,NetDataContractSerializer 将对象图序列化为 XML,因此无论数据成员的大小是多少,唯一重要的是其值的大小。例如,Int16 数据成员的值 10023 将被序列化为字符串“10023”(0x3130303233),而不仅仅是 10023(0x2727)。

我记得在 Remoting 中我可以使用 BinaryFormatter,它根据数据成员的类型对值进行序列化,但我不知道是否可以将它与 WCF 一起使用。

有人有解决方案吗?

最佳答案

这是一个如何在此处进行自定义编码的示例 https://www.codeproject.com/Articles/434665/WCF-Serialization-A-Case-Study

值得注意的是,实际发送的内容与您有一个使用默认编码发送 byte[] 的服务方法相同。无论您如何配置序列化,通过网络传输的消息仍然使用 SOAP XML 信封。

它看起来像这样:

POST http://127.0.0.1:12345/forSwerGup182948/Client HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo+WkoDpet/JOtGlW+EHdpDQAAAAAvFs5XOJ0tEW0wTvNVRDUIiabR6u+p+JNnd5Z+SWl1NcACQAA
SOAPAction: "http://tempuri.org/ITransmissionService/SendData"
Host: 127.0.0.1:12345
Expect: 100-continue
Accept-Encoding: gzip, deflate
Content-Length: 2890

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><SendData xmlns="http://tempuri.org/"><message>eyI8Q2FsbGJhY2tJZD5rX19CYWNraW5nRmllbGQiOiJlYTQ3ZWIzMS1iYjIzLTRkODItODljNS1hNTZmNjdiYmQ4MTQiLCI8RnJvbT5rX19CYWNraW5nRmllbGQiOnsiPENoYW5uZWxOYW1lPmtfX0JhY2tpbmdGaWVsZCI6Ikdyb3VwMSIsIjxOYW1lPmtfX0==</message></SendData></s:Body></s:Envelope>

关于wcf - 以二进制方式序列化 WCF 消息,而不是作为 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1282819/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com