2

クラス ライブラリに次のクラスがあります: Artist、これは POCO です。

今、私は次のような署名を持つWebサービス(上記のライブラリへの参照を持つ)にメソッドを持っています:

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

アプリケーション (上記のクラス ライブラリへの参照もある) からこのサービスを利用しようとすると、Artist_AddArtistメソッドの予想されるパラメーターは ではなく、部分クラスであるArtistの新しいタイプArtistが生成されます。Reference.cs自動生成されます。

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

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

4

2 に答える 2

3

おそらく、WCF サービスへの切り替えが選択肢の 1 つになるでしょう。私が覚えている限りでは、WCF サービスを使用すると、サーバー側とクライアント側で同じ型を再利用できます。

この記事では、ASMX Web サービスを WCF サービスに移行する方法について説明します。

于 2009-04-10T22:06:49.303 に答える
2

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

生成されたファイルを編集するなどのことを行うように指示する人もいますが、それは良い習慣ではありません (Web 参照が更新されるとすぐに変更が消えてしまうため)。

あなたが見ているのは設計によるものです。基本: Web サービスのしくみを参照してください。

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

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

これを考える 1 つの方法は、クライアントとサービスの両方が .NET であるため、この問題だけがあるということです。クライアントが Java で作成されている場合、クラスを共有することは考えられません。


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

于 2009-04-10T22:03:36.690 に答える