2011-01-11 14 views
2

クライアントから呼び出すストアドプロシージャを持つEF4モデルがあります。 サーバーのコードは次のようになります。クライアントからWCF DataService [WebGet]関数を呼び出す

[WebGet]   
public IQueryable<SalesData> GetSalesReport(int reportType, int yr, int m, int d) 
{ 
    DateTime dt = new DateTime(yr, m, d); 
    return this.CurrentDataSource.RP_SalesReport(reportType, dt, dt).AsQueryable<SalesData>(); 
} 

URL「HTTPを使用して、この使用してIEを呼び出す:// localhostを:?12345/MyService.svc/GetSalesReport reportType = 1 &年= 2009 &メートル= 4 &をd = 2 "期待どおりに動作します。

私のクライアントアプリケーションでは、サービス(http:// localhost:12345/MyService.svc)への参照を追加しましたが、試したことがありますが、関数GetSalesReportはオブジェクトブラウザに表示されません。 (通常のEFエンティティはオブジェクトブラウザに表示されます)

私の質問は次のとおりです。クライアントからこの関数を呼び出すにはどうすればよいですか?

クライアントに応じてこの関数を呼び出す方法に違いがあります(Windows Phone 7 Silverlightアプリケーションからこの関数を呼び出したいが、今はWPFテストクライアントを使用してテスト中)。

+0

何の属性ServiceContract? –

+0

これはADO.NET Data Service(コードネーム "Astoria")であり、唯一の属性は[WebGet]です。私が知る限り、ADO.NET Data Serviceに[ServiceContract]を追加することはできません。 – Ronny

+0

生成されたコードを確認しましたか?生成されたエンティティを含む膨大なファイルが必要です。 GetSalesReportのエントリがあり、それはどのように見えるのですか? –

答えて

5

実際には、ADO.NET DataTeamは、クライアントからServiceMethodを呼び出すためのCodeGenを実装していないようです。

だから、私の問題へのsoloutionは、クライアントでこのコードを記述することです:

 // execute the service operation 
     Uri u = new Uri(string.Format("{0}/GetSalesReport?reportType={1}&yr={2}&m={3}&d={4}", 
         context.BaseUri, 1, 2009, 4, 2),UriKind.RelativeOrAbsolute); 

     var datas = context.Execute<SalesData>(u); 

このブログの記事を書いたギル・フィンクのおかげ:あなたは、このメソッドに関連付けられていないhttp://blogs.microsoft.co.il/blogs/gilf/archive/2008/11/14/consuming-data-services-service-operations.aspx

+1

このシナリオでは、他の問題が発生する可能性があります。現在、ODataによって生成されたプロキシは、複合型、エンティティ型のみをサポートしていません。つまり、SalesDataが複合型(CSDLの "ComplexType"要素)として定義されている場合、OData生成の応答はフィードとしてフォーマットされません。回避策は複雑な型をエンティティとして定義することです。偽のテーブルを定義する必要があるかもしれません。 –

関連する問題