0

MCTS 70-516 本の例、より具体的には 470 ページの例を実行しようとしています。

要件 / 作成するもの:

  • Northwindデータベース_
  • 空の ASP.Net Web ソリューション
  • CustOrderHistすべてのテーブルとストアド プロシージャを含む edmx

次に、次の.svcファイルが作成されます。

using System.Data.Services;
using System.Linq;
using System.ServiceModel.Web;

namespace WcfDataServicesLibrary
{
    public class NorthwindService : DataService<NorthWindEntities>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*",EntitySetRights.All);
            config.SetServiceOperationAccessRule("*",ServiceOperationRights.All);
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
        }

        [WebGet]
        public IQueryable<CustOrderHist_Result> CustOrderHist(string customerID)
        {
            using(NorthWindEntities db = new NorthWindEntities())
            {
                return CustOrderHist(customerID).ToList().AsQueryable();
            }
        }
    }
}

次に、テキストに示されているように実行しようとします。

"http://localhost:65363/NorthwindService.svc/CustOrderHist?customerID='ALFKI'"

その後、エラー メッセージ StackOwerFlowException が表示されます。

なんで ?

私は次のことを試しました:

  • 1 行だけを返すようにプロシージャを変更するには
  • 文字列を返す新しいプロシージャを作成します

変化なし。同じ結果です。

32 ビット マシン (Windows Vista) を使用しています。したがって、64 ビットは問題ではありません。

手がかりは大歓迎です。

4

1 に答える 1

1

CustOrderHistメソッドに再帰があります

次のことを試してください。

    [WebGet]
    public IQueryable<CustOrderHist_Result> CustOrderHist(string customerID)
    {
        using(NorthWindEntities db = new NorthWindEntities())
        {
            return db.CustOrderHist(customerID).ToList().AsQueryable();
        }
    }
于 2012-12-16T14:19:50.307 に答える