2009-07-24 2 views
1

私は、Webサービスでデータを保持するためのクラスの '共通の'ライブラリを共有する大規模な管理winformsアプリケーションを継承しました。私が抱えている問題は、Webサービスコールからクラスのインスタンスが返された場合、それがクライアント上で別の型として出て、他の 'Common'プロジェクトロジックを使用して操作できないということです。winformsクライアントとWebサービスの間で共通のクラスを使用するにはどうすればよいですか?

WebサービスはCommon.Widget型のオブジェクトを返しますが、そのオブジェクトをワイヤで転送するためにそのオブジェクトをラップするためです。これが完了すると、.NetがInvalidCastExceptionをスローするため、オブジェクトを「共通」型にキャストできません。

これはWCFとDataMember属性で行っていますが、このプロジェクトをWCFにアップグレードすることはできません。テストサーバーは非常に大きく、テストサーバーはWin2K(Win2Kでは.Net 3+なし)です。

私はこれを簡単に行う方法がありますか、またはWebサービスから取得したすべてのデータを共通ライブラリの生の型に変換する必要がありますか?事前に

おかげ

ライアン

答えて

2

これは、これが想定される方法です。

コードが現在動作している場合、これらのタイプのいずれかを返すと、現在どのように動作していますか?それはASMX Webサービスがどのように動作するかを翻訳する必要があります。

+0

すべてのオブジェクトを幾分厄介な形に再作成します。コードは、インスタンスがWebサービスであるか共通であるかを確認できないスパゲッティです。私はWCFに移行するまで、今コレクションのマニュアル翻訳を行います。 ありがとう –

0

私はこれよりも良い方法があります願っています、しかし:あなたが唯一のWebサービスとの共通ライブラリが含まれている場合、その後のオブジェクトを返すWebサービスを定義します両方の環境(Widgetクラスなど)で使用するタイプの場合、winformsクライアントでWidgetタイプのオブジェクトを使用できます。あなたが見ているキャストの例外は、両方のプロジェクトにCommonライブラリを含めているからです - 同じ名前が付けられていても、WinformsアプリケーションはWebサービスのCommonとは異なる独自のプロジェクトでCommonを扱います。

上記のアプローチ(WebサービスでのみCommonを含む)は、Webサービスから来ていなくても共通オブジェクトをwinformsアプリケーションで使用できるようにします(つまり、それらをnew "キーワード)。

0

問題は、オブジェクトがワイヤを介して渡されるときに、Webサービスのプロキシにプライベートなクラスにデシリアライズされることです。したがって、クラスの名前は同じですが、別のクラスです。また、Visual StudioでF12を使用している場合は、Webサービスのクラスに「共通」プロジェクトのクラスのすべてのメソッドが含まれていないことに気づくでしょう。

関連する問題