Я создал службу SOAP, которая должна возвращать объект Category и CategoryCollection через запрос SubSonic.Проблема в том, что я могу вернуть DataTable данных просто отлично, однако объекты, возвращаемые из службы, имеют внутренний тип активной записи, а не объекты DAL.
Например, когда я использую службу,Я вижу SOAPService.Category, но не SOAPService.CategoryCollection (я должен видеть SOAPService. [Все другие объекты данных], а SOAPService.Category относится к типу активной записи и не содержит фактических свойств Category.
Оба класса определены в моем поколении SubSonic DAL.
namespace TrainingWebService.DAL
{
/// <summary>
// Strongly-typed collection for the Category class.
/// </summary>
[Serializable]
public partial class CategoryCollection : ActiveList<Category, CategoryCollection>
{
.
.
.
и
/// <summary>
/// This is an ActiveRecord class which wraps the Categories table.
/// </summary>
[Serializable]
public partial class Category : ActiveRecord<Category>, IActiveRecord
{
.
.
.
Эти классы существуют в решении TrainingWebService.
TrainingWebService.ISOAPService.cs:
с использованием VRPCTrainingWebService.DAL;
пространство имен TrainingWebService {// Веб-служба обучения VRPC - интерфейс [ServiceContract] открытый интерфейс ISOAPService {
[OperationContract]
string GetDBConnectionStringDetails();
[OperationContract]
string ReturnSameString(string someString);
//
// Database-related
//
[OperationContract] // categories
CategoryCollection GetAllCategories(); // SubSonic object
[OperationContract]
DataTable GetAllCategoriesAsDataTable();
[OperationContract]
DataTable GetCategoryAsDataTable(int id);
[OperationContract]
Category GetCategoryByID(int id); // SubSonic object
[OperationContract]
// products
ProductCollection GetAllProducts();
[OperationContract]
Product GetProductByID(int id);
[OperationContract] // suppliers
SupplierCollection GetAllSuppliers();
[OperationContract]
Supplier GetSupplierByID(int id);
}
}
В моем SOAPService.cs
public CategoryCollection GetAllCategories() // get a collection of all categories
{
return DataCaller.GetAllCategories();
}
public DataTable GetAllCategoriesAsDataTable()
{
return DataCaller.GetCategoriesAsDataTable();
}
public DataTable GetCategoryAsDataTable(int id)
{
return DataCaller.GetCategoryAsDataTable(id);
}
Here's a snip of the DataCaller code.
/// <summary>
/// Get all categories - returns a collection of categories
/// </summary>
/// <returns></returns>
public static CategoryCollection GetAllCategories()
{
categoryCollection =
DB.Select().From("Categories")
.ExecuteAsCollection<CategoryCollection>();
return categoryCollection;
}
public static DataTable GetCategoryAsDataTable(int id)
{
try
{
dtResults = new Select()
.Where(Category.Columns.CategoryID).IsEqualTo(id)
.From(Category.Schema)
.ExecuteAsCollection<CategoryCollection>().ToDataTable();
}
catch (Exception ex)
{
throw ex;
}
return dtResults;
}
Я думаю, что проблема может быть в разоблачении * .DAL enчерез мой веб-сервис, поэтому они доступны.
У меня это отлично работает в другом решении, которое я недавно построил, но по какой-то причине я не вижу, чего мне здесь не хватает.