WCFコントラクトのインターフェイスを3番目のDLLに移動し、手作業でプロキシを生成しているときにそれらをクライアントから消費したいと考えています。別のdllにWCFコントラクトを移動する
プロキシを生成するためにクライアントから消費するとき、DLLのこれらのインターフェイスには[ServiceContract]
属性が必要ですか?
契約だけを持つDllとクライアントとサーバーの間で共有するDTOの名前は何ですか。
WCFコントラクトのインターフェイスを3番目のDLLに移動し、手作業でプロキシを生成しているときにそれらをクライアントから消費したいと考えています。別のdllにWCFコントラクトを移動する
プロキシを生成するためにクライアントから消費するとき、DLLのこれらのインターフェイスには[ServiceContract]
属性が必要ですか?
契約だけを持つDllとクライアントとサーバーの間で共有するDTOの名前は何ですか。
WCFデータとサービス契約を別々のアセンブリに配置するのは非常に一般的な方法です。私の以前のプロジェクトでは、Company.OurProject.Contracts.dll
のような名前を付けました。 既存のクラスを再利用してプロキシを生成するには、サービス契約([ServiceContractAttribute]
とマークされている)と対応するデータコントラクトのインターフェイスをそのアセンブリに配置する必要があります。私は実際にサービスを実装することを避けるだろう。ここで
は、「参照アセンブリにおける再利用の種類」を選択した際に再利用できるものにもっと洞察力を持つように別の偉大な答えです:WCF Service Reference generates its own contract interface, won't reuse mine
これは、一般的な、おそらく推奨されるアプローチです。
はい、契約書dllに記載されているサービスインタフェースにサービス契約を置く必要があります。
名前空間がdllの名前と一致する必要はないことに注意してください。あなたの現在のアセンブリがCompanyName.Technology.Service
のようなネームスペースを持つCompanyName.Technology.Service.dll
のようなものであると仮定すると、別のアセンブリへのコントラクトを抽出する必要がありますが、ネームスペースを同じにして(それでも意味があれば)、アセンブリ名はCompanyName.Technology.Service.Contracts
です。あなたが望んでいないのは、その中に "contracts"という名前の名前空間です。
*私は* .ServiceContracts.dllを使用しています。これは私のシステムに複数のコントラクトアセンブリがあるためです。たとえば、DataContracts.dllはデータストアにアクセスするために使用されます。
また、バイナリを共有している場合は、生成されたプロキシを回避します。私はそれをWCFで作業するよりきれいな方法だと思っています。プロキシをラップする生成コードではなく、直接プロキシを使用することができます。 –
「手作業でプロキシを生成する」とはどういう意味ですか?私が理解しているように、既存のアセンブリからクラスを再利用してプロキシを生成したいと考えています。それは事実ですか? –
@Andriy Buday yes –