我对 OData 和 WCF 数据服务是全新的,所以这可能是一个简单的问题。我正在使用 VS Web Developer Express 2010,其中我在控制台应用程序中托管了一个非常简单的 WCF 数据服务。它从存储库(位于单独的 dll 项目中)返回一个简单“Study”类的 IQuerable 集合,该集合又从另一个 dll 中的数据库项目中检索“Study”类(因此解决方案中有 3 个项目)。
我在数据库项目中还有一个“实验”类,并且一项研究中可以有多个实验。当我从研究中排除实验类时,一切正常,并且我得到了返回的数据。当我将 List 集合添加到 Study 类时,就会出现问题,然后当我尝试运行该服务时,会出现运行时错误。在 Firebug 中,错误是“500 内部服务器错误”,浏览器中的消息是“请求错误”。服务器在处理请求时遇到错误。有关更多详细信息,请参阅服务器日志。
我有 IIS 7,而且刚刚安装了 IIS 7.5,但它对我来说还是全新的,因此我无法弄清楚该服务托管在哪里或在哪里查看服务器/Web 日志。 “C:\inetpub\logs\LogFiles\W3SVC1”中仅可见 IIS 7 日志。当我运行应用程序时,VS Web 服务器 (Cassini) 不会启动,因此这表明它托管在 IIS 7.5 中(?)。
So
- 如何返回子类/复杂对象?
- 我如何知道我的服务托管在哪里以及在哪里可以找到服务器日志?
这是主机应用程序:
using MyStudyRepository;
using MyStudyDB;
namespace MyStudyService
{
public class Program
{
public static void Main(string[] args)
{
string serviceAddress = "http://localhost:998";
Uri[] uriArray = { new Uri(serviceAddress) };
Type serviceType = typeof(StudyDataService);
using (var host = new DataServiceHost(serviceType,uriArray))
{
host.Open();
Console.WriteLine("Press any key to stop service");
Console.ReadKey();
}
}
}
public class StudyDataService : DataService<StudyRepository>
{
public static void InitializeService(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
}
}
}
这是存储库:
using MyStudyDB;
namespace MyStudyRepository
{
public class StudyRepository
{
List<Study> _List = new List<Study>();
//Add constructor to populate myStudies list on creation of class
public StudyRepository()
{
for (int i = 1; i < 5; i++)
{
Study myStudy = new Study() { ID = i, StudyOwnerId = i, StudyName = "Study" + i.ToString() /*, Experiments = null */ };
_List.Add(myStudy);
}
}
public IQueryable<Study> Studies
{
get
{
return _List.AsQueryable<Study>();
}
}
}
}
这是数据库:
namespace MyStudyDB
{
public class Study
{
public int ID { get; set;}
public int StudyOwnerId { get; set; }
public string StudyName { get; set; }
//public List<Experiment> Experiments { get; set; }
}
public class Experiment
{
public int ID { get; set; }
public string Name { get; set; }
public int StudyId { get; set; }
}
}