2012-08-14 29 views
7

私はWebサービスとクライアントを持っています。パラメータと戻り値の型で使用されるクラスは、両方で共有される共通のDLL内にあります。しかし、Web参照を更新するたびに、Visual Studioは同じ名前とパブリックプロパティとメソッドを持つクラスのコピーを生成します。クライアントコードが共通DLLのバージョンを使用しようとすると、ソリューションはコンパイルされません。私は、Webの参照を更新するたびに "複製"クラスを削除し、共通のdllの名前空間を指すようにusingステートメントを追加することで、この問題を解決できます。これを永続的に修正する方法はありますか?Web参照の追加/更新時にReference.csのプロキシクラスの生成を防止します

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

+1

この類似の質問http://stackoverflow.com/questions/134064/reuse-existing-types-is-ignored-when-adding-a-service-referenceによると、 "Reuse Types"は "old"学校 "(asmx)ウェブ参照。 – stannius

+0

http://stackoverflow.com/questions/3389679/how-does-visual-studio-2008-and-svcutil-decide-which-types-to-re-use-from-refere – stannius

+0

コメントを追加する必要があります回答。私はそれからupvoteします。 –

答えて

2

これはasmx Webサービスの「機能」です。

  • 最新のタイプのWebサービスを使用してください。
  • 共通のDLLを使用しないでください
  • 上記のオリジナルの質問のように、Web参照を更新するたびに手動で修正してください。

出典:その他のstackoverflowの質問:ドメインクラスで

0

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

しかし、ここではデザイン上の問題があると思います。 Webサービスを作成するとき、私たちはクライアントが私たちからdllを参照する必要はないと考えています。 Webサービスによって公開される型だけで十分です(Webサービスはすべて相互運用性に関するもので、クライアントアプリケーションはJavaで記述されていますが、.NET DLLは参照できません)。

これは、Webサービスを参照する際にこれらのタイプが作成される理由です。私の意見では、クライアントアプリケーションでWebサービスによって生成されたクラスだけに頼るべきです。クライアントプロジェクトから共有DLLへの参照を削除します。

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

+1

Downvoter、あなたの投票の説明を提供してください。ありがとう。 – Fabio

+0

私の推測は、質問に答えないからです。 "これにもかかわらず、古い靴やガラス瓶でこれをハンマーで叩くべきですか?" – stannius

+0

はい、@stannius、多分それが理由です。私は自分の答えを少し変えたので、「ハンマーシューズ」を持っている人はそれを聞いてはいけません。ところで、私の答えが何らかの形であなたに役立つことを願っています。 – Fabio

1

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

+1

-1:彼は "Update Web Reference" –

1

、Web参照を追加するとき、プレフィックス予想外で生成クラスを防ぐために、偽のAnonymousType =を設定
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = false)] しかし、これは、Reference.csのクラス、auto-genがドメインクラスと同じ構造を持つことを保証します。

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

関連する問題