4

AttachmentDataをパラメーターとして受け入れるasmxWebサービスを呼び出す必要があります。これには、base64Binaryタイプのメンバーがあります。

<s:complexType name="AttachmentData">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="FileName" type="s:string" /> 
<s:element minOccurs="0" maxOccurs="1" name="UploadedUserName" type="s:string" /> 
<s:element minOccurs="0" maxOccurs="1" name="Attachment" type="s:base64Binary" /> 
</s:sequence>
</s:complexType>

添付ファイルのファイルの内容を次のように送信しています。

//read the file contents
byte[] buffer = null;
     try {
        FileInfo attachment = new FileInfo(filepath);
        using (FileStream stream = attachment.OpenRead()) {
           if (stream.Length > 0) {
              buffer = new byte[stream.Length];
              stream.Read(buffer, 0, (int)stream.Length);
           }
        }
     }
     catch {
        buffer = null;
     }

//create AttachmentData object
WebSrvc.AttachmentData att = new WebSrvc.AttachmentData();
att.FileName = fileName;
att.Attachment = buffer;

これはbase64Binaryを送信する正しい方法ですか?ファイルの内容をbase64にエンコードする必要がありますか、それともオンザフライで行いますか?上記のコードを使用して、Webサービスリクエストのサイズを不必要に肥大化させているかどうかを確認しようとしています。

4

1 に答える 1

3

Base 64エンコーディングでは、入力の3バイトごとに出力に4バイトが必要なため、多少のオーバーヘッドがありますが、それほど多くはありません。

Base 64エンコーディングの良いところは、印刷可能な文字のみを使用するため、人間が読めるテキスト文字で動作するように構築されたHTTPプロトコルに簡単に埋め込むことができることです。

コード例では、byte []バッファは、ネットワークに配置される前に(つまり、HTTPプロトコルに埋め込まれて送信される前に)自動的にBase64に変換されます。

于 2013-03-14T14:26:37.253 に答える