- PR -

Webサービスによるファイル処理について

投稿者投稿内容
mimi
常連さん
会議室デビュー日: 2004/01/20
投稿数: 26
投稿日時: 2004-02-17 16:30
VB.NETからWebサービスを利用して、ファイルをコピーしたいのですが、
VB.NETから自分のパソコンに対しては、
  FileCopy("ファイルのコピー元",""ファイルのコピー先)
という形でコピーができます。
このような形で自分のパソコンからサーバに対して、Webサービスを利用してファイルを移動させたいのですがよい方法はないのでしょうか?
わざわざWebサービスを利用する必要はないのでしょうか?
基本的なことも理解できていない部分があるので、説明不足になっているかもしれませんがよろしくお願いします。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-18 06:46
諸農です。

WEBサービス側は、どのようなメソッドを公開しているのでしょうか?

サービス側がクライアントとのファイル転送のサービスを
公開・提供していれば、ファイルの受け渡しは基本的には可能です。
パフォーマンス等は別としてですが。。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
mimi
常連さん
会議室デビュー日: 2004/01/20
投稿数: 26
投稿日時: 2004-02-18 09:10
WEBサービス側は、それにあったメソッドを作成しようかと思っています。

もしよければ、WEBサービス側がどのようなメソッドを提供し、クライアント側はそのメソッドをどのように利用すればよいのか、簡単なプログラムを教えていただければ幸いです。

クライアント側はVB.NETのWindowsアプリケーションで、WEBサービスはVB.NETのASP.NETWebサービスです。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-02-18 09:40
http://www.amazon.co.jp/exec/obidos/ASIN/4891003049/250-3118442-2369801

この本の最初に出てくる例題が、クライアントとウェブサービスを利用したファイルの転送でした。(勿論、応用が必要な事は言わずもがな。)
一度、この本で勉強されてみるといいかもしれません。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-18 22:37
諸農です。

引用:

もしよければ、WEBサービス側がどのようなメソッドを提供し、クライアント側はそのメソッドをどのように利用すればよいのか、簡単なプログラムを教えていただければ幸いです。

クライアント側はVB.NETのWindowsアプリケーションで、WEBサービスはVB.NETのASP.NETWebサービスです。



私が以前に試したのは、サービス側をC#/ASP.NETでクライアント側をDelphi、
また、サービス側をDelphi、クライアント側をC#/WindowsFormでしたので、
言語指定のサンプル提示依頼にはお応えできそうにないですね。。(^^
というか、WEBサービスって言語依存ではなくインタフェース依存のはずでは?

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
mimi
常連さん
会議室デビュー日: 2004/01/20
投稿数: 26
投稿日時: 2004-02-19 16:21
言われたとおり、WEBサービスは言語依存ではなくインタフェース依存だと思います。
初歩的なところも理解ができていないので、それがどのように関係しているのかはわかりません。
お返事ありがとうございます。
ookubo
会議室デビュー日: 2003/04/14
投稿数: 7
投稿日時: 2004-02-19 17:32
FileCopy("ファイルのコピー元",""ファイルのコピー先)

"ファイルのコピー元",","ファイルのコピー先"はファイル名ですか?
また、どのような形式で指定してますか?
("C:\\HOGE\\HOGE.TXT" or "\\\\hogesserver\\share\\hoge\\hoge.txt)
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-02-21 14:36
諸農です。

その後色々調べられたかと思います。
お昼に暇時間があったので、簡単なサンプルを作ってみました。
#申し訳ない、C#ですm(__)m

参考にしてください。

■サーバー側
コード:
//サーバー側のローカルで、ファイルを格納しておくパス。
const string C_FilePath = @"D:\Data\";

//サーバー側がクライアント側からファイルを受け取るメソッド。
[WebMethod]
public bool PutFile(string AFileName,byte[] AFile)
{
    try
    {
        string filePath = C_FilePath + AFileName;
        FileStream fs = File.Create(filePath);
        try
        {
            fs.Write(AFile,0,AFile.Length);
            return true;
        }
        finally
        {
            fs.Close();
        }
    }
    catch(Exception /*ex*/)
    {
        return false;
    }
}

//サーバー側がクライアント側にファイルを送出するメソッド。
[WebMethod]
public byte[] GetFile(string AFileName)
{
    byte[] ret = null;
    string filePath = C_FilePath + AFileName;
    if (File.Exists(filePath))
    {
        FileStream fs = File.Open(filePath,FileMode.Open);
        try
        {
            ret = new byte[fs.Length];
            fs.Read(ret,0,ret.Length);
        }
        finally
        {
            fs.Close();
        }
    }
    return ret;
}




■上記のサービスを利用するクライアント側
コード:
//サーバにクライアントローカルのファイルを送出する
private void button1_Click(object sender, System.EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
        FileStream fs = File.Open(openFileDialog1.FileName,FileMode.Open);
        try
        {
            string filename = Path.GetFileName(openFileDialog1.FileName);
            byte[] file = new byte[fs.Length];
            fs.Read(file,0,file.Length);
            UpDownSV.UpDown upsv = new UpDownSV.UpDown();
            if (upsv.PutFile(filename,file))
                MessageBox.Show("アップ成功");
            else
                MessageBox.Show("アップ失敗");
        }
        finally
        {
            fs.Close();
        }
    }
}

//サーバーからクライアントで指定したファイル名のファイルを受信する
private void button2_Click(object sender, System.EventArgs e)
{
    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        string filename = Path.GetFileName(saveFileDialog1.FileName);
        UpDownSV.UpDown upsv = new UpDownSV.UpDown();
        byte[] file = upsv.GetFile(filename);
        if (file.Length>0)
        {
            FileStream fs =
               new FileStream(saveFileDialog1.FileName,FileMode.Create);
            try
            {
                fs.Write(file,0,file.Length);
            }
            finally
            {
                fs.Close();
            }
            MessageBox.Show("ファイルの取得に成功しました");
        }
        else
        {
            MessageBox.Show("サーバーにファイルがないか取得に失敗しました");
        }
    }
}



このサービスのWSDLは次のようになっています。(一部抜粋)
このWSDLを元にクライアントアプリではプロキシクラスを作成して、
上記で作成したWEBサービスアプリが提供するサービスを利用しています。
コード:
- <types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
- <s:element name="PutFile">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="AFileName" type="s:string" /> 
  <s:element minOccurs="0" maxOccurs="1" name="AFile" type="s:base64Binary" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="PutFileResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="1" maxOccurs="1" name="PutFileResult" type="s:boolean" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="GetFile">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="AFileName" type="s:string" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
- <s:element name="GetFileResponse">
- <s:complexType>
- <s:sequence>
  <s:element minOccurs="0" maxOccurs="1" name="GetFileResult" type="s:base64Binary" /> 
  </s:sequence>
  </s:complexType>
  </s:element>
  </s:schema>
  </types>




ではでは(^^)/
_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/

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