.NETクライアントからADO.NETデータサービスのサービス操作を消費
-
21-09-2019 - |
質問
私は、エンティティの多くといくつかのサービス操作でADO.NETデータサービスを構築しようとしています。一方の側に私は、ADO.NETエンティティデータモデルとADO.NETデータサービスが配置されているASP.NET Webアプリケーションを作成しました。他の側では、私はデータサービスへのサービス参照を有する第2のASP.NET Webアプリケーションを作成します。
エンティティは非常によくて来ている、私は私が望むデータを取得するためにLINQを使用することができます:
TestEntities entities = new TestEntities(
new Uri("http://localhost/service/service.svc"));
var query = from customer in entities.Customers
where customer.ID == 1234
select customer;
query.ToList();
この作品。しかし、サービス業務を通じて取得した情報は完全に私を見逃さ。 データサービス側のコード:
public static void InitializeService(IDataServiceConfiguration config) {
config.SetEntitySetAccessRule("*", EntitySetRights.All);
config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
}
[WebInvoke]
public IQueryable<Customer> GetSomeCustomers() {
TestEntities entities = new TestEntities();
return from customer in entities.Customers
where customer.ID > 0 && customer.ID < 20
select customer;
}
私は私のクライアントのプロジェクトにサービス参照を追加すると、Visual Studioは、任意のサービス操作にピックアップしていませんでした。私は私が構築したURIとBeginExecuteのたDataServiceContextオブジェクトまたは(この場合)TestEntitiesオブジェクトのいずれかの方法、またはそのような何かを介してそれらにアクセスすることができます知っているが、それは私がそれをしたいかではありません。
私が欲しいのはサービスオペレーションの戻りデータを通過するためにLINQを使用することです。 これは可能ですか?それは、右すべきですか?
解決
シンプルなもの、あなたが知っている一度ます。
ただ、いくつかのことは知ってます:
サービスの操作のためのメソッドを作成doesntの(EntityClassGeneratorを使用)現在DataServiceClientGenerator。
文脈上からCreateQueryメソッドを使用して、現在、彼らはそのために、クライアント側(あなたがからCreateQueryを使用する場合、「()」の最後に追加されていることに気づくだろうに何の検証がないため動作し、サービス操作のためにサポートされていません。このようなクエリの方法「ます。http://localhost/service.svc/method()?パラメータ= 2 を」、あなたはからCreateQueryを使用することができますが、それは推奨されません。
必ずしもすべてのサービス操作が値を返しますが、この例のために私はやるもののために例を示します。
public partial class NorthwindEntities
{
public IQueryable<Order> OrdersByRegion(int regionId)
{
return this.Execute<Orders>(new Uri(string.Format("{0}OrdersByCountry?regionId={1}", this.BaseUri, regionId), UriKind.RelativeOrAbsolute));
}
}
あなたはより多くの情報が必要な場合はご質問はお気軽にお尋ねください。
サービスが呼び出されたときにPS:あなたの例では、あなたのサービスの操作に新しいデータコンテキストを作成する必要があります(サーバー側)いけないのDataServiceはすでに参照がインスタンス化しています。
あなたが実際にこのようなサービス側でのデータコンテキストの作成を無効にすることができます
protected override NorthwindEntities CreateDataSource()
{
return new NorthwindEntities();
}