1

我的 Outlook 插件通过 https 发送大文件。目前,我在客户端使用 Convert.ToBase64String(),在 IIS 端的 http 处理程序上使用 Convert.FromBase64String()。

这涉及到一些性能问题,而且我也在通过 SSL 保护数据,所以我真的在问是否有任何方法可以通过 https 转换字节数组,而不使用会降低接收端 CPU 性能的编码。

我的客户代码:

string requestURL = "http://192.168.1.46/websvc/transfer.trn";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestURL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";

// Chunk(buffer) is converted to Base64 string that will be convert to Bytes on  the handler.
string requestParameters = @"fileName=" + fileName + @"&secretKey=testKey=" + @"&currentChunk=" + i + @"&totalChunks=" + totalChunks + @"&smGuid=" + smGuid +
                            "&data=" + HttpUtility.UrlEncode(Convert.ToBase64String(bytes));

// finally whole request will be converted to bytes that will be transferred to HttpHandler
byte[] byteData = Encoding.UTF8.GetBytes(requestParameters);

request.ContentLength = byteData.Length;

Stream writer = request.GetRequestStream();
writer.Write(byteData, 0, byteData.Length);
writer.Close();
// here we will receive the response from HttpHandler
StreamReader stIn = new StreamReader(request.GetResponse().GetResponseStream());
string strResponse = stIn.ReadToEnd();
stIn.Close();

我有性能问题的服务器代码:

byte[] buffer = Convert.FromBase64String(context.Request.Form["data"]); // 
4

2 回答 2

4

您不必使用 contentType 发送application/x-www-form-urlencoded。为什么不直接设置为application/octet-stream,设置内容长度并将数据直接复制到请求流中?只要您在另一端正确解释它,就可以了。

于 2012-07-05T00:25:45.977 回答
0

如果您使用 WCF 数据服务,您可以通过单独的二进制流发送二进制数据

[可以发送数据] 作为单独的二进制资源流。这是访问和更改可能表示照片、视频或任何其他类型的二进制编码数据的二进制大对象 (BLOB) 数据的推荐方法。

http://msdn.microsoft.com/en-us/library/ee473426.aspx

您还可以使用 HttpWebRequest 上传二进制数据

通过 HttpWebRequest 传递二进制数据

使用 HTTPWebrequest (multipart/form-data) 上传文件

于 2012-07-05T00:18:32.960 回答