- PR -

SOAPを使ったWebサービスの開発

1
投稿者投稿内容
hiroko
会議室デビュー日: 2003/08/22
投稿数: 19
投稿日時: 2003-12-04 17:50
いつもお世話になっております。

現在、C#でWebサービスの開発を行っており、
サーバとクライアントの通信にDIMEを使って画像ファイルを添付しています。

そこで質問ですが、
クライアント(Windowsアプリ)からサーバへの画像ファイルの添付は下記のコードで実現できましたが、サーバ側から、クライアント側に画像ファイルを添付する方法が分かりません。
つまり、サーバ側では、下記の【service】が取れないので、
Attachmentの方法が分からないということです。

実現したいことは単純で、クライアント側が、画像取得要求を出したらサーバ側がこれを受けて
画像ファイルを添付したXMLを返すということを実現したいです。

どなたかご存知の方がございましたら、お教えください。
よろしくお願いします。

//
// XMLに画像データの添付を行う
//
service.RequestSoapContext.Attachments.Add(new Microsoft.Web.Services.Dime.DimeAttachment("image/jpeg",
Microsoft.Web.Services.Dime.TypeFormatEnum.MediaType,
stream));

※stream:System.IO.Stream
※service:Webサービスオブジェクト

cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-12-04 18:13
byte[]を返すというのもあるかもしれませんが、
URLを返してクライアントが、あらためてHTTPやFTPで取るのはだめでしょうか。
hiroko
会議室デビュー日: 2003/08/22
投稿数: 19
投稿日時: 2003-12-04 18:28
Castsさん返信ありがとうございました。

確かにbyte[]に変換して送るというのも手ですね。
レスポンスタイムなども考えて進めていきたいと思います。

どうもありがとうございました。
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-12-04 18:48
やってみました。
コード:
サービス
[WebMethod]
public byte[] Data()
{
	FileStream fs = new FileStream(
		Server.MapPath(filename),FileMode.Open);
	Byte[] b = new byte[fs.Length];
	fs.Read(b,0,(int)fs.Length);
	fs.Close();
	return b;
}

呼出し
byte[] by = new localhost.Service1().Data();
MemoryStream ms = new MemoryStream(by);
Bitmap b = new Bitmap(ms);
ms.Close();
pictureBox1.Image = b;


ちゃんと、表示されました。(わりと簡単)
hiroko
会議室デビュー日: 2003/08/22
投稿数: 19
投稿日時: 2003-12-05 10:36
Catsさん返信ありがとうございます。

質問の件ですが、更に調査を進めてみると解決しました。
下記ソースコードはサーバのサービスの一部です。

soapContexをResponseContextにすることで、
サーバからクライアントへのレスポンスに対してアタッチメントを行うことができました。

Catsさんテストまでしていただいて、ありがとうございました。

//
// レスポンス用コンテキストを作成する
//
Microsoft.Web.Services.SoapContext soapContex = Microsoft.Web.Services.HttpSoapContext.ResponseContext;
//
// ファイルストリームを作成する
//
System.IO.FileStream fileStream = new System.IO.FileStream(
Server.MapPath("incoming/" + originalName),
System.IO.FileMode.Open);
//
// レスポンスに画像を添付する
//
soapContex.Attachments.Add(
new Microsoft.Web.Services.Dime.DimeAttachment("image/jpeg",
Microsoft.Web.Services.Dime.TypeFormatEnum.MediaType, fileStream1));
1

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