Выставление объекта данных через сервис? - PullRequest
1 голос
/ 25 октября 2011

Я создал службу 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через мой веб-сервис, поэтому они доступны.

У меня это отлично работает в другом решении, которое я недавно построил, но по какой-то причине я не вижу, чего мне здесь не хватает.

1 Ответ

1 голос
/ 26 октября 2011

Не забудьте украсить свои объекты DAL с помощью [DataContract], если применимо.

Класс DataContractAttribute

...