2008-08-09 12 views
7

私はまだASP.NETの世界では新しいので、私はここから離れているかもしれませんが、これまでのところ私の限られた知識!ASP.NET Webサービスの結果、プロキシのクラスと型変換

ビジネス名前空間に標準ビジネスオブジェクト "連絡先"があります。私はデータベースから連絡先の情報を取得して返すWebサービスを作成します。私はその後、上記の詳細を要求するクライアントアプリケーションを作成します。

次に、「連絡先」を取り、Utils.BuyContactNewHat()のような魔法を使うユーティリティメソッドを作成します。どの種類のコンタクトがタイプBusiness.Contactのコンタクトを取るか。

私のクライアントアプリケーションに戻ってBuyContactNewHatメソッドを利用したいので、Utils名前空間への参照を追加します。予想通りGetContactの戻り値の型がBusiness.ContactMyWebService.Contactのものでありませんので

Contact c = MyWebService.GetContact("Rob); 
Utils.BuyContactNewHat(c); // << Error Here 

:しかし、問題が発生すると。 Webサービスにアクセスすると、実際にはWSDLによって生成されたプロキシクラスに対してプログラミングしているので、これがなぜであるのか理解しています。

このタイプの不一致を処理する "簡単な"方法はありますか?私はおそらく、反射を使用して2つのオブジェクトが同じ構造を持つことを保証する一般的なコンバータクラスを作成しようと考えていました。

答えて

4

あなたは正しい方向にあります。プロキシオブジェクトから自分のオブジェクトの1つにデータを戻すには、左利きのコードを実行する必要があります。すなわちプロパティ値をコピーする。私はすでに、リフレクションを使用するジェネリックメソッドがあることを賭けておきます。

Webサービス(.net remoting)以外のものを使用する人もいます。または、バイナリのシリアル化を使用します。私はあなたが理由のためにWebサービスを使用していると推測しているので、プロパティのコピーを行う必要があります。

4

WSDLが提供する生成クラスを実際に使用する必要はありません。生成するコードを見てみると、.NETのフレームワーククラスを呼び出してSOAPリクエストを送信するだけです。過去に私はそのコードを普通の.csファイルにコピーして編集しました。私は特にこれを試していませんが、プロキシクラス定義を削除して元のクラスを使用してSOAP呼び出しの結果を受け取ることができない理由はありません。それはすでにフードの下で反射をしているに違いない、それを2回行うのは残念だ。

1

プロキシコードの生成を制御するために使用できるスキーマインポータ拡張を作成することをお勧めします。このアプローチを使用すると、ある種の名前空間から別の名前空間にオブジェクトをコピーする、またはプロキシ生成のreference.csクラスを変更して、次にWeb参照を更新するときにそのクラスを置き換えるなど、問題なく(問題なく)問題を解決できます。

http://www.microsoft.com/belux/msdn/nl/community/columns/jdruyts/wsproxy.mspx

:ここ

は、件名に(非常に)良いチュートリアルです
関連する問題