2009-04-10 2 views
1

私はクラスライブラリで以下のクラスがあります:Artist、POCOC#:(通常POCOから自動生成されたクラスへの)期待されるWebサービスの変更、パラメータの型

ある今、私は、Webサービスのメソッドを持っています私はアプリケーションからこのサービスを使用しようとする(また、上述-上記クラスライブラリへの参照を持っていること)

[WebMethod] 
public int Artist_AddArtist(Artist a) { 
// 
} 

、このような署名付き(これは上述-上方ライブラリへの参照を持ちます) Artist_AddArtistメソッドの期待パラメータはArtistではありませんが、新しいタイプのArtistはge自動的に生成される部分クラスであるReference.csに記載されています。

したがって私のアプリケーションでは、ライブラリと同じArtistクラスを使用しているので、Webサービスメソッドはこの新しい自動生成型を予期しています。そのインスタンスをWebサービスに渡すことはできません。

この問題を解決するにはどうすればよいですか?

答えて

3

多分WCFサービスに切り替えることはあなたのオプションです。私が知る限り、WCFサービスでは、サーバーとクライアント側で同じタイプを再利用できます。

This articleは、ASMX WebサービスをWCFサービスに移行する方法を説明しています。

+0

うわー、今WCFに切り替えました –

2

問題を修正することはできませんし、修正することはできません。

生成されたファイルを編集するように指示する人もいますが、これは良い方法ではありません(Web参照が更新されるとすぐに変更がなくなるため)。

あなたが見ているのは設計によるものです。 Basics: How Web Services Workを参照してください。

「Web参照の追加」を使用すると、Visual StudioはサービスからWSDLファイルをダウンロードし、WSDLのXMLスキーマを使用して、スキーマによって記述されたXMLを表すいくつかのプロキシクラスを作成します。また、サービス自体のプロキシクラスを作成し、サービス内の各操作のメソッドを持ちます。

プロキシデータクラスは、サービスが受信する予定のXMLにシリアル化することができ、サーバーが応答で送信するXMLから逆シリアル化できます。

クライアントとサービスの両方が.NETであるため、この問題が発生する可能性があります。あなたのクライアントがJavaで書かれていれば、あなたはクラスを共有することを考えないでしょう。


必要に応じて、WCFがこれを行うことができます。クライアントとサービスの間に依存関係が導入されています(クラスを含むアセンブリの互換バージョンを使用する必要があります)。ただし、実行する必要がある場合はオプションがあります。これらのクラスで、クライアントとサービスの両方で使用する必要がある動作がある場合に便利です。

+0

それで、 'オリジナル'クラスのインスタンスを '自動生成'クラスのインスタンスに変更するにはどうすればよいでしょうか?元のプロパティ値を反映し、それぞれを期待される型インスタンスに追加しますか? –

+0

する必要はありません。自動生成型を送信します。 –

+0

それは、特定のWebサービスとアプリケーションを結合することを意味します。したがって、共有ライブラリの使用を無効にします。 –

関連する問題