- PR -

WinFormからバイナリファイル転送

1
投稿者投稿内容
YOSHI.H
会議室デビュー日: 2002/10/25
投稿数: 17
お住まい・勤務地: 福井県福井市
投稿日時: 2002-12-04 17:46
FTPを利用せずにWindowsFormからバイナリファイル(画像など)をサーバに
送信したいのですができません。一番早いのはブラウザから送る方
法だと思いますが、他に方法がないでしょうか?

試行錯誤:
【その1】
-----------------------------------------------------------------
BinaryFormatterでシリアライズしたStreamをWebサービ
スに投げてみた。・・・ コンパイルエラーで先へ進めず
# WebMethodの引数には'System.IO.Stream'型にしているのに、
# 型'Stream'の値を'<Web References>.Stream' に変換できません。
# となる。 無知が為せる技でしょうが。

【その2】
-----------------------------------------------------------------
DataSetにbase64Binary型でセットしてWebサービスに
投げてみた。・・・ XMLに展開できないよエラー
chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 2002-12-05 18:58
サーバ側をXML Webサービスで作り、クライアントでWindowsFormを使ってバイナリデータをアップロードしたいのならば、わざわざDataSetを使ったりする必要はないと思います。
単純にWebMethodの引数をバイト配列(byte[])にすれば、あとは勝手にbase64BinaryにエンコードされたテキストとしてSOAPメッセージがPOSTされます。

下記、当方で動作中のコードの一部抜粋サンプルです。
----【Webサービス側】-------------------------------------------
コード:
[WebMethod]
public bool UploadBinaryData(byte[] binary)
{
  bool bResult = false;

  try
  {
    // 例えば、受信したデータをファイルに書き込む…
    System.IO.FileStream tempFile = new System.IO.FileStream("c:\\temp.dat", System.IO.FileMode.OpenOrCreate);
    tempFile.Write(binary, 0, binary.Length);
    tempFile.Close();

    bResult = true;
  }
  catch
  {
    // error.
  }

  return bResult;
}



----【WinForm側】-------------------------------------------
コード:
public void SendBinaryData()
{
  this.Cursor = System.Windows.Forms.Cursors.WaitCursor;

  // 例えば MemoryStream を使って…
  System.IO.MemoryStream tempStream = new System.IO.MemoryStream();

  // ここで tempStream にバイナリデータを書き込む

  if (tempStream.Length > 0)
  {
    // Webサービスの呼び出し
    ws.Service1 hoge = new ws.Service1();
    bool bResult = hoge.UploadBinaryData(tempStream.GetBuffer());
  }

  this.Cursor = System.Windows.Forms.Cursors.Default;
}



参考になりますでしょうか。
YOSHI.H
会議室デビュー日: 2002/10/25
投稿数: 17
お住まい・勤務地: 福井県福井市
投稿日時: 2002-12-05 22:59
chackさん、丁寧なご返答ありがとうございました。

おっしゃる通りの方法で実現しました。
何も難しいこと無かったですね、・・・お恥ずかしい。
1

スキルアップ/キャリアアップ(JOB@IT)