1

私の Outlook プラグインは、https 経由で大きなファイルを送信します。現在、クライアント側で Convert.ToBase64String() を使用し、IIS 側の http ハンドラーで Convert.FromBase64String() を使用しています。

これによりパフォーマンスの問題が発生し、SSL経由でデータを保護しているため、受信側でCPUパフォーマンスを犠牲にするエンコーディングを使用せずにhttps経由でバイト配列を変換する方法があるかどうかを本当に尋ねています.

私のクライアントコード:

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 Data Services を使用する場合は、別のバイナリ ストリームを介してバイナリ データを送信できます。

[データを送信できます] 別のバイナリ リソース ストリームとして。これは、写真、ビデオ、またはその他の種類のバイナリ エンコード データを表すバイナリ ラージ オブジェクト (BLOB) データにアクセスして変更する場合に推奨される方法です。

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

HttpWebRequest を使用してバイナリ データをアップロードすることもできます

HttpWebRequest によるバイナリ データの受け渡し

HTTPWebrequest でファイルをアップロードする (multipart/form-data)

于 2012-07-05T00:18:32.960 に答える