私たちが取り組んでいるプロジェクトは、古典的な 3 層アーキテクチャです。層 1 はデータベース サーバー、層 2 はアプリケーション サービス、層 3 はプレゼンテーション層 (Web サイト) です。
アプリケーション サービス層には、エンティティ フレームワーク モデルと、モデル内のエンティティを公開する WCF データ サービス ベースのサービスを含むプロジェクトがあります。
public class DataService : DataService< PortalEntities >
これは、URI を介して照会できる本格的な OData サービスです/dataservice.svc/mytable?$filter=contains(fieldname,’string’)
。これは、クエリを定義するだけでよいため、jQuery を使用して何かを開発している人にとっては素晴らしいことです。問題は、このサービスが中間層であるため、外部からは見えないことです。
私が試みている解決策は、サービス参照によって作成されたエンティティを公開する Web サイトで別の WCF データ サービスを公開することです。中間層サービスへのサービス参照を追加すると、データ コンテキストが新しい WCF データ サービスで使用されているというデータ コンテキストが得られます。
public class DataService : DataService< PortalEntities >
CreateDataSource を上書きする必要があります。
protected override PortalEntities CreateDataSource()
{
return new PortalEntities(GetMianModelServiceUri());
}
新しいサービスはプロキシのように機能し、公開されたエンティティを返します (クエリは正常に.../Services/OData/DataService.svc/tbl_Country
機能します)。
ただし、クエリがサービスに渡されると、たとえば.../OData/DataService.svc/tbl_Country?$select=Name
、実装されていない例外がスローされます。
中間層サービスと同じクエリをサポートするように Web サイト サービスを拡張する方法について何かアイデアはありますか?