我创建了一个应该通过SubSonic查询返回一个Category对象和一个CategoryCollection的SOAP服务。问题是我可以返回DataTable的数据,但是从服务返回的对象在内部是活动记录类型的,而不是我的DAL实体。例如,当我使用服务时,我看到SOAPService.Category,但没有看到SOAPService.CategoryCollection(我应该能够看到SOAPService [所有其他数据实体],并且SOAPService.Category是活动记录类型,并且不包含实际的类别属性。通过我的亚音速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 Web服务 - 接口 [的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;
}
我认为问题可能在于通过我的Web服务暴露* .DAL实体,因此它们是可访问的。
我有这个工作很好,在另一个解决方案,我建立了一段时间,但由于某种原因,我看不到我在这里失踪。
也许DataContract将适用? – Tim
啊是的!我使用的是旧版本的DAL生成器,它缺少CollectionDataContract和DataContract附加组件。 – ElHaix
现在可以工作了吗? – Tim