8

Web サービスとクライアントがあります。パラメーターと戻り値の型で使用されるクラスは、両方で共有される共通の DLL にあります。ただし、Web 参照を更新するたびに、Visual Studio は同じ名前とパブリック プロパティおよびメソッドを持つクラスのコピーを生成します。その後、クライアント コードが共通 DLL のバージョンを使用しようとするため、ソリューションはコンパイルされません。Web 参照を更新するたびに「重複する」クラスを削除し、共通の dll の名前空間を指す using ステートメントを追加することで、問題を解決できます。これを永久に修正する方法はありますか?

更新: 以下の私のコメントを参照してください。これは、asmx Web サービスの「機能」です。次のいずれか以外に回避方法はありません。1) より最新のタイプの Web サービスを使用します。2) 一般的な DLL を使用しないでください。3) 上記の元の質問のように、Web 参照を更新するたびに手動で修正します。

4

4 に答える 4

2

これは、asmx Web サービスの「機能」です。次のいずれか以外に回避方法はありません。

  • より最新のタイプの Web サービスを使用します。
  • 共通の DLL を使用しない
  • 上記の元の質問のように、Web 参照を更新するたびに手動で修正します。

ソース: その他のスタックオーバーフローの質問:

于 2012-11-07T00:11:10.357 に答える
1

同じ問題が発生しましたが、クライアントの要求/応答タイプを使用して、参照を正しいアセンブリに追加することを怠っていました。その参照を追加し、[サービス参照の追加]ダイアログで[タイプの再利用]チェックボックスがオンになっていることを確認すると、正しく機能しました。

于 2012-09-12T16:52:35.930 に答える
1

ドメイン クラスで、AnonymousType=false を設定して、Web 参照
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false )] を追加するときに予期しないプレフィックスを持つクラスが生成されないようにしますが、これにより、クラス、Reference.cs の auto-gen のみが保証されます。ドメインクラスと同じ構造です。

これを回避する方法は、ドメイン オブジェクトにシリアライズ/デシリアライズすることです。

于 2013-01-24T00:59:49.267 に答える
1

それを行う方法はありません。

ただし、ここには設計上の問題があると思います。Web サービスを作成するとき、クライアントが私たちから dll を参照する必要がないことを期待しています。Web サービスによって公開された型だけを使用するだけで十分です (Web サービスは相互運用性がすべてです。Java で記述されたクライアント アプリを想像してみてください。.NET dll を参照することはできません)。

そのため、Web サービスを参照するときにこれらの型が作成されます。私の意見では、クライアント アプリの Web サービスによって生成されたクラスのみに依存する必要があります。クライアント プロジェクトから共有 dll への参照を削除します。

これはあなたの質問に直接答えるものではありませんが、問題の代替手段を提供します。

于 2012-09-06T16:26:51.803 に答える