5

非常に基本的な質問がいくつかあります。私はWCFを初めて使用し、サービスプロジェクト、Webアプリケーションプロジェクト、およびビジネスロジックなどに使用するいくつかのクラスライブラリプロジェクトを持つアプリケーションを構築しています.

IIS で WCF をローカルにホストしており、サービス参照をプロジェクトに追加しようとしています。

質問 1.参照を追加する場合、各プロジェクトに個別にサービス参照を追加する必要がありますか、またはプロジェクト間で同じサービス参照を共有する方法はありますか?

私が尋ねる理由は、個別の参照を追加すると、各参照が独自​​の名前空間を取得し、プロジェクト間で同じオブジェクトを渡す必要がある場合、各 ServiceClient に異なる名前空間があるため、InvalidCastException が発生するためです。

例 - Site.Business.XDataService.XDataServiceClient().GetItem() は Site.Web.XDataService.XDataServiceClient().GetItem() と同じではありません

質問 2. Service インターフェイスを実装するクラスで、ローカル サービスのアドレスを次のように指定しました。

[ServiceBehavior(Namespace = "http://localhost:801/XDataService.svc", IncludeExceptionDetailInFaults = true)]

これは正しくないようです。コードを別の/ライブ環境に移動すると、明らかにこの部分を再度変更して再コンパイルする必要があります。アプリを再構築せずにこのアドレスを変更できるように、どこでこれ (Web.Config?) を指定できますか?

あらゆる種類の洞察に感謝します。ありがとう!

4

2 に答える 2

6

最初の質問への回答として、サービス参照を独自のプロジェクトに配置し、そのサービスにアクセスする必要がある他のすべてのプロジェクトでそのプロジェクトを参照できます。

基本的に、すべてのサービス リファレンスは .NET コードの塊 (名前空間、クラスなど) です。

いっそのこと (!) WCF サービスの場合は、無料でスローされるインターフェイス (サービス用に定義したインターフェイスと多かれ少なかれ同じインターフェイス) も取得できるため、依存関係の挿入に関して優れたことができ、テストなどが容易になります。

于 2011-10-15T15:52:26.040 に答える
4

最初の質問 - サービスは他のコードと同じです。たとえば、データベース アクセス コードです。データベースにアクセスする必要があるすべてのプロジェクトにそれを配置する必要がありますか? いいえ - 他のプロジェクトが参照できるプロジェクトに配置する必要があります。

2 番目の質問については、名前空間を指定していますが、サービス エンドポイント アドレスを指定していると思われると思います。名前空間は、C# コードの名前空間に似ています。基本的に、同じ名前のオブジェクトが複数ある場合に、識別と明確化を提供します。通常、同様の名前空間を使用しますhttp://mywebsite.com/MyService/VersionNumberIfRequired

アドレス自体は構成で指定されます。アドレスは環境/展開場所によって変わります - 名前空間はそうすべきではありません。

于 2011-10-15T16:05:11.237 に答える