我的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=" + @"¤tChunk=" + 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"]); //
答案 0 :(得分:4)
您不必使用contentType application/x-www-form-urlencoded
发送邮件。为什么不设置为application/octet-stream
之类的内容,设置内容长度并将数据直接复制到请求流中?只要你在另一端正确解释它,你就没事了。
答案 1 :(得分:0)
如果使用WCF数据服务,则可以通过单独的二进制流
发送二进制数据[可以发送数据]作为单独的二进制资源流。这是用于访问和更改可以表示照片,视频或任何其他类型的二进制编码数据的二进制大对象(BLOB)数据的推荐方法。
http://msdn.microsoft.com/en-us/library/ee473426.aspx
您还可以使用HttpWebRequest
上传二进制数据