1

Webサービスとデータを保持するためのクラスの「共通」ライブラリを共有する大規模な管理用winformsアプリケーションを継承しました。私が抱えている問題は、Webサービス呼び出しからクラスの入力されたインスタンスを返すと、それが別のタイプとしてクライアントに出力され、他の「共通」プロジェクトロジックを使用して操作できないことです。

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

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

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

前もって感謝します

ライアン

4

3 に答える 3

2

これが本来あるべき姿です。

コードが現在機能している場合、これらの型のいずれかを返すと、現在何をしているのでしょうか? それを変換する必要があります。これは、ASMX Web サービスが意図した動作です。

于 2009-07-24T16:42:40.787 に答える
0

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

上で述べたアプローチ (Common only in the Web service を含む) では、Common オブジェクトが Web サービスから取得されていなくても、winforms アプリで Common オブジェクトを使用できます (つまり、"new" キーワードを使用してローカルに作成できます)。

于 2009-07-24T16:30:23.947 に答える
0

問題は、オブジェクトが送信されると、Web サービスのプロキシに対してプライベートなクラスに逆シリアル化されることです。したがって、クラスの名前は同じですが、別のクラスです。また、(Visual Studio で F12 を使用する場合) Web サービスのクラスには、「共通」プロジェクトのクラスのすべてのメソッドがないことに気付くでしょう。

于 2009-07-24T16:34:45.373 に答える