WCF数据服务 - 存储过程 - StackOverflowException

时间:2012-12-16 00:15:21

标签: wcf-data-services

我试图在MCTS 70-516书中运行一个例子,更具体地说是第470页上的例子。

要求/创建内容:

  • Northwind数据库
  • 一个空的ASP.Net网络解决方案
  • 包含所有表格和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。

为什么?

我尝试了以下内容:

  • 更改程序以仅返回一行
  • 创建一个返回字符串
  • 的新过程

没有变化。同样的结果。

我有一台32位机器(Windows Vista)。所以64位不是问题。

非常感谢任何线索。

1 个答案:

答案 0 :(得分:1)

CustOrderHist方法中有递归

尝试以下方法:

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