2011-10-25 125 views
1

我创建了一个应该通过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实体,因此它们是可访问的。

我有这个工作很好,在另一个解决方案,我建立了一段时间,但由于某种原因,我看不到我在这里失踪。

+1

也许DataContract将适用? – Tim

+0

啊是的!我使用的是旧版本的DAL生成器,它缺少CollectionDataContract和DataContract附加组件。 – ElHaix

+0

现在可以工作了吗? – Tim

回答