- PR -

Webサービスの戻り値のキャスト

1
投稿者投稿内容
ごん
会議室デビュー日: 2005/08/06
投稿数: 3
投稿日時: 2007-04-26 17:27
public class MyType
{
int a;
int b;
}

WebサービスはMyType型のデータを戻り値としています。
MyTypeはクラスライブラリ化しており、WebサービスとWebアプリでそれぞれ参照設定しています。
private void WSCall()
{
// WebService呼び出し
localhost.MyService srv = new localhost.MyService();
localhost.MyType result = srv.GetData();

func((MyType)reslt); ←キャストでエラー
}
Webサービスの戻り値をクラスライブラリの関数にパラメータとして渡したいのです。
クラスライブラリには「MyType」が定義してあるので型を「localhost.MyType」
ではなく「MyType」として渡したいのですがどうすればいいのでしょうか?

よろしくお願いします
がんふぃーるど
ベテラン
会議室デビュー日: 2006/06/05
投稿数: 58
お住まい・勤務地: さいたま
投稿日時: 2007-04-27 01:35
がんふぃーるどです。お世話さまです。

Webサービスで使用しているWSDLはサービスのスキーマを定義しています。
ですので、WSDLから生成したプロキシクラスのMyType(local.MyType)とWebサービスの
サーバ側で使用しているクラスライブラリのMyTypeはスキーマが同じだけでクラス
としての互換性等は一切ありません。

というか、WSDLからプロキシクラスを生成したのであれば、クラスライブラリのMyTypeは
Webアプリ側で必要ありません。funcメソッドの引数にはプロキシクラスのMyTypeを使うように
すればいいです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-27 07:52
名前空間も含めた型名を比較してみましょう。
_________________
ごん
会議室デビュー日: 2005/08/06
投稿数: 3
投稿日時: 2007-04-28 09:07
がんふぃーるどさんJittaさんどうもです。
やはり無理なんですね。
どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-05-06 22:53
引用:

ごんさんの書き込み (2007-04-28 09:07) より:
がんふぃーるどさんJittaさんどうもです。
やはり無理なんですね。
どうもありがとうございました。


ああ、チェックしてなかった。
つか、どうして「無理」なんでしょう?

いや、まぁ、やりたいことがデータの受け渡しではなく、データ型の受け渡しなら無理なんだけど。それでもタイプ コンバータを作るとか、方法が無いわけではないのですが。
_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-05-07 22:05
昔、試みたこと
一番いいところ、GDNJ へリンク張っていたのですが、GDNJ が閉鎖されている。やられた。。。コピーしておくんだったorz

_________________
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2007-05-07 22:26
Webサービスのプロキシでは、対象のWebメソッドのラップメソッドを、
リフレクションで取得して、その情報を元にオブジェクトを構築します。
なので、生成されたプロキシクラスのメソッドの戻り値の型などを、
手で修正してやると動くと思います。

ただし、プロキシを手で修正というのは本来あまりよい方法ではないのと、
ASP.NET環境でWeb参照を行っている場合は、プロキシも動的に生成されるように
なったため、この方法は使えませんので注意が必要です。

--追記
戻り値ではなくて、パラメータの方でしたね。

--追記
パラメータではなくて、戻り値の方でしたね。



何言ってんだ…


[ メッセージ編集済み 編集者: なちゃ 編集日時 2007-05-07 23:43 ]
1

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