我刚刚创建了一个类似于您所描述的 WCF 主机/客户端设置,包括需要支持 iOS 和 Android。我们所做的是在主机和客户端之间使用 BasicHTTPBinding 和 SOAP 消息传递。我们在主机和客户端之间上下发送大量二进制文件,在某些情况下 >1GB,我们通过以下方式执行此操作:
a) 将二进制编码到 XML 消息的正文中作为 base64 文本(参见下面的代码示例)。b) 此外,当二进制文件大于 100MB 时,我们使用交互方法上传/下载,将二进制文件分块成 100mb 切片,作为包发送并在主机或客户端上重新组装。这有助于避免超时和其他问题。c) 你没有问,但这一切都适用于 SSL 加密。
BasicHTTPBinding 足够通用,也足够灵活,可以支持各种客户端设备;只要它在 XML 中,它就可以处理你扔给它的任何东西。从功能上讲,我们创建一个带有“文本”部分的 XML 消息(我们将有关用户的所有与文本相关的信息、下载/上传类型等打包到其中)和将二进制文件打包到其中的“正文”部分。XML 如下所示:
<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<HostConnectResponse xmlns="http://SomeDomain">
<HostConnectResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:a="http://schemas.datacontract.org/2004/07/SomeDomain">
<a:BodySection>binaries goes in here</a:BodySection>
<a:TextSection><WebServiceParams><DeviceType value=\"Laptop\" /><StreamDirection value=\"Host\" /><ServiceType value=\"FileTransferService\" /><Direction value=\"Host\" /><Method value=\"ping\" /></WebServiceParams></a:TextSection>
</HostConnectResult>
</HostConnectResponse>
</s:Body>
</s:Envelope>
祝你的项目好运。