0

.zip ファイルを、basicHTTPBinding (SOAP 1.1) を介してバイト配列として WCF サービスに送信しています。

基本的に、ファイルはディスクから読み取られ、テキスト エンベロープ オブジェクトでサーバーに送信されます。

.net では、次の方法でディスクからファイルを読み取りました。

...

var bytes = ReadGridLibFile(path + fileName);

....
private static byte[] ReadGridLibFile(string fileName)
        {
            byte[] bytes;
            int numBytesToRead;
            using (FileStream fsSource = new FileInfo(fileName).OpenRead())
            {
                // Read the source file into a byte array.
                bytes = new byte[fsSource.Length];
                numBytesToRead = (int)fsSource.Length;
                int numBytesRead = 0;
                while (numBytesToRead > 0)
                {
                    // Read may return anything from 0 to numBytesToRead.
                    int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                    // Break when the end of the file is reached.
                    if (n == 0)
                        break;

                    numBytesRead += n;
                    numBytesToRead -= n;
                }
                numBytesToRead = bytes.Length;
            }
            return bytes;
        }

このようなバイト配列が WCF サービスに送信されると、サーバー側のディスクに書き込まれ、開くことができる .zip アーカイブになります。

同じアップロード機能のために perl クライアントを実装する必要があります。

perl では、次のようなバイトを読み取ります。

while (read(FILE, $buf, 60 * 57)) {
$bytes .= $buf;
}
close(FILE);
$bytes = encode_base64( $bytes );

$bytes をデータとしてエンベロープ オブジェクトに入れ、サーバー上で HTTP::Request 経由で手動で送信すると、バイトの配列が取得されますが、ディスクに保存すると、それは不良な (壊れた) zip アーカイブになります。perl でバイト配列を読み込んで送信する方法の問題は何ですか?

4

0 に答える 0