3

Visual StudioとSvcUtilを使用して、サービスと統合するためのプロキシコードを生成できます。VS 2010以前では、共有タイプのクロスティア参照ライブラリを維持したい場合に問題がありました。これにより、データコントラクトタイプの同等性とローカルタイプを適切に使用できないという問題に対処するためのいくつかの回避策が必要になりました。

問題へのURL参照: WCFクライアントコード生成-「参照されたアセンブリからのタイプの再利用」に関する問題

Visual Studio 2012、ASP.NET 4.5、C#コードを使用しています

私の質問:「アセンブリ間での型の再利用はVS 2012で修正されましたか?」私は今いくつかのコードを移植していますが、このバグが頭を悩ますかもしれないことも心配しています。テストケースを実行することはできますが、誰かがすでに答えを持っていればもっと速くなります。オンラインで答えが見つからない場合(グーグルで検索して2011年を取得し続ける-問題はまだ存在します)、修正が行われていない可能性があるというのが私の経験です。

私の目標:将来の開発チームが、企業の.Netアプリケーション層とレイヤー全体で同じタイプのライブラリを再利用できるようにする[プレゼンテーション(Webサイト、モバイルアプリレイヤー-サーバー側など)、ドメイン(サービス、ビジネスロジックレイヤー、データアクセス)層)]。ある程度の均一性とコードの再利用を確保したいと思います。コードは各レイヤーで可能な限り「緩く結合」されますが、タイプはリファレンスアセンブリを介して保証されます。同様に、今後のサードパーティの外部統合をサポートするコードが必要です。したがって、外向きのサービス用にDataContractAttributeで装飾された型からすべてのプロキシ型を構築し、サーバー側アプリケーション用に参照される型を維持する必要があります。

ここで泥沼に遭遇するのでしょうか?上記のリンクの問題は解決されていますか?お知らせ下さい。

4

2 に答える 2

4

参照されたアセンブリからのタイプの再利用オプションに存在すると報告するバグは、再利用VSを指定することにより、/rフラグを使用して内部でsvcutil.exeを呼び出すために発生します。

ただし、svcutil.exeはコードの生成を支援するために使用しますが、残念ながら、サービスコントラクトの解析に関してはDataContractSerializer、これにはかなり厳格なルールのセットがあります。

したがって、サービスXSDがこの一連のルールに準拠していない限り、svcutil.exeはXmlSerializer/ rフラグをサポートしない(または再利用する)を使用するように切り替えます。したがって、タイプを再利用することはできません。

(バイナリ参照を介して)実際のサービス契約タイプを参照できる場合、サービス参照をすべて一緒に廃止できるため、これははるかに優れたソリューションです。WSCF.blueを使用して、サービスコントラクトを生成することもできます。これは、独自のカスタムシリアライザーを備えており、型の再利用をサポートしているためです。

于 2012-12-20T15:09:11.723 に答える
2

私の状況では、WebServiceとWebAppの両方がドメインエンティティを含む同じアセンブリを参照していました。当然、各エンティティはDataContractAttributeで装飾されてReuse Type in Referenced Assembliesいましたが、WebServiceによって公開されたエンドポイントを使用してWebAppでServiceReferenceを生成すると、VS2012によって無視されたように見えたため、ローカルアセンブリに型のコピーが追加されました。次に(数時間の試行錯誤の後)、WebServiceのインターフェイスのServiceContractAttributeに名前空間パラメーターを追加しました。追加されると、再解析されたServiceReferenceは、shared必要に応じてDataContractタイプの参照を開始しました。

 [ServiceContract(Namespace="http://www.example.com/Demo.WebService/")]
 public interface IConfigurationService { ..methods here.. }
于 2013-08-07T01:02:43.847 に答える