私はODataとWCFデータサービスを初めて使用するので、これは簡単な問題かもしれません。VS Web Developer Express 2010を使用しており、コンソールアプリで非常に単純なWCFデータサービスをホストしています。リポジトリ(別のdllプロジェクトにある)から単純な「Study」クラスのIQuerableコレクションを返します。これにより、別のdllのdbプロジェクト(ソリューション内の3つのプロジェクト)から「Study」クラスが取得されます。
また、dbプロジェクトには「Experiment」クラスがあり、1つのスタディに複数の実験が存在する可能性があります。実験クラスを研究から除外すると、すべてが機能し、データが返されます。この問題は、StudyクラスにListコレクションを追加すると発生し、サービスを実行しようとするとランタイムエラーが発生します。Firebugでは、エラーは「500 Internal Server Error」であり、ブラウザのメッセージは「RequestError」です。サーバーでリクエストの処理中にエラーが発生しました。詳細については、サーバーログを参照してください。
IIS 7を使用していて、IIS 7.5もインストールしたばかりですが、これもまったく新しいので、サービスがホストされている場所やサーバー/Webログを表示する場所がわかりません。'C:\ inetpub \ logs \ LogFiles\W3SVC1'に表示されるIIS7ログのみがあります。アプリを実行してもVSWebサーバー(Cassini)が起動しないため、IIS 7.5(?)でホストされていることを示しています。
では、子クラス/複雑なオブジェクトを返すにはどうすればよいですか?
-サービスがホストされている場所とサーバーログの場所を確認するにはどうすればよいですか?
ホストアプリは次のとおりです。
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>();
}
}
}
}
そしてこれがDBです:
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; }
}
}