WCF Rest problem with memory

146 Views Asked by At

I have created a rest service in asp.net 4 it was generated by nhydrate tool. when i run the service and browse to service help page, and the choosing and example for a complicated method with many relationships the w3wp.exe start to take all the server memory in 3 mins and the service returns outofmemoeryexception. i am really confused with this matter, any help would be much appreciated, note that all the data i'am requsting are JSON small packets but the mapped table for this method it's complicated.

public class DataService : IDataService
    {
        /// <summary>
        /// Get a list of all GetJobList DTO items
        /// </summary>
        public List<di.testproj.DataTransfer.Job> GetJobList()
        {
            var retval = new List<di.testproj.DataTransfer.Job>();
            retval.RunSelect();
            return retval;
        }   
    }



[ServiceContract]
    public interface IDataService
    {

        #region Job Select All

        /// <summary>
        /// Get a list of all Job DTO items
        /// </summary>
        /// 
        [WebGet(UriTemplate = "JobList", ResponseFormat = WebMessageFormat.Json)]
        [Description("Description for GET /JobList")]
        [OperationContract]
        List<di.testproj.DataTransfer.Job> GetJobList();

        #endregion
    }

DTO Layer:

[Serializable()]
    [DataContract()]
    public partial class Job : IDTO
    {
        #region Class Members

        #region FieldNameConstants Enumeration

        /// <summary>
        /// An enumeration of this object's fields
        /// </summary>
        public enum FieldNameConstants
        {
             /// <summary>
             /// Field mapping for the 'SectorID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'SectorID' property")]
            SectorID,
             /// <summary>
             /// Field mapping for the 'SectionID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'SectionID' property")]
            SectionID,
             /// <summary>
             /// Field mapping for the 'ReportingToID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'ReportingToID' property")]
            ReportingToID,
             /// <summary>
             /// Field mapping for the 'PreferredQualificationsEn' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'PreferredQualificationsEn' property")]
            PreferredQualificationsEn,
             /// <summary>
             /// Field mapping for the 'PreferredQualificationsAr' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'PreferredQualificationsAr' property")]
            PreferredQualificationsAr,
             /// <summary>
             /// Field mapping for the 'PreferredExperinceEn' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'PreferredExperinceEn' property")]
            PreferredExperinceEn,
             /// <summary>
             /// Field mapping for the 'PreferredExperinceAr' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'PreferredExperinceAr' property")]
            PreferredExperinceAr,
             /// <summary>
             /// Field mapping for the 'JobTypeID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobTypeID' property")]
            JobTypeID,
             /// <summary>
             /// Field mapping for the 'JobTitleEn' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobTitleEn' property")]
            JobTitleEn,
             /// <summary>
             /// Field mapping for the 'JobTitleAr' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobTitleAr' property")]
            JobTitleAr,
             /// <summary>
             /// Field mapping for the 'JobObjectiveEn' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobObjectiveEn' property")]
            JobObjectiveEn,
             /// <summary>
             /// Field mapping for the 'JobObjectiveAr' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobObjectiveAr' property")]
            JobObjectiveAr,
             /// <summary>
             /// Field mapping for the 'JobID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobID' property")]
            JobID,
             /// <summary>
             /// Field mapping for the 'JobFamilyID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobFamilyID' property")]
            JobFamilyID,
             /// <summary>
             /// Field mapping for the 'JobCategoryID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'JobCategoryID' property")]
            JobCategoryID,
             /// <summary>
             /// Field mapping for the 'IsActive' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'IsActive' property")]
            IsActive,
             /// <summary>
             /// Field mapping for the 'ID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'ID' property")]
            ID,
             /// <summary>
             /// Field mapping for the 'DivisionID' property
             /// </summary>
            [System.ComponentModel.Description("Field mapping for the 'DivisionID' property")]
            DivisionID,
        }

        #endregion

        #endregion

        #region Constructors

        /// <summary>
        /// The default contructor for the Job DTO
        /// </summary>
        public Job()
        {
        }

        #endregion

        #region Object Properties

        /// <summary>
        /// The DivisionID field
        /// </summary>
        [DataMember()]
        public virtual int? DivisionID { get; set; }
        /// <summary>
        /// The ID field
        /// </summary>
        [DataMember()]
        public virtual int ID { get; set; }
        /// <summary>
        /// The IsActive field
        /// </summary>
        [DataMember()]
        public virtual bool? IsActive { get; set; }
        /// <summary>
        /// The JobCategoryID field
        /// </summary>
        [DataMember()]
        public virtual int? JobCategoryID { get; set; }
        /// <summary>
        /// The JobFamilyID field
        /// </summary>
        [DataMember()]
        public virtual int? JobFamilyID { get; set; }
        /// <summary>
        /// The JobID field
        /// </summary>
        [DataMember()]
        public virtual int JobID { get; set; }
        /// <summary>
        /// The JobObjectiveAr field
        /// </summary>
        [DataMember()]
        public virtual string JobObjectiveAr { get; set; }
        /// <summary>
        /// The JobObjectiveEn field
        /// </summary>
        [DataMember()]
        public virtual string JobObjectiveEn { get; set; }
        /// <summary>
        /// The JobTitleAr field
        /// </summary>
        [DataMember()]
        public virtual string JobTitleAr { get; set; }
        /// <summary>
        /// The JobTitleEn field
        /// </summary>
        [DataMember()]
        public virtual string JobTitleEn { get; set; }
        /// <summary>
        /// The JobTypeID field
        /// </summary>
        [DataMember()]
        public virtual int? JobTypeID { get; set; }
        /// <summary>
        /// The PreferredExperinceAr field
        /// </summary>
        [DataMember()]
        public virtual string PreferredExperinceAr { get; set; }
        /// <summary>
        /// The PreferredExperinceEn field
        /// </summary>
        [DataMember()]
        public virtual string PreferredExperinceEn { get; set; }
        /// <summary>
        /// The PreferredQualificationsAr field
        /// </summary>
        [DataMember()]
        public virtual string PreferredQualificationsAr { get; set; }
        /// <summary>
        /// The PreferredQualificationsEn field
        /// </summary>
        [DataMember()]
        public virtual string PreferredQualificationsEn { get; set; }
        /// <summary>
        /// The ReportingToID field
        /// </summary>
        [DataMember()]
        public virtual int? ReportingToID { get; set; }
        /// <summary>
        /// The SectionID field
        /// </summary>
        [DataMember()]
        public virtual int? SectionID { get; set; }
        /// <summary>
        /// The SectorID field
        /// </summary>
        [DataMember()]
        public virtual int? SectorID { get; set; }

        #endregion

        #region Navigation Properties

        /// <summary>
        /// The relation Job -> Competency
        /// </summary>
        [DataMember()]
        public virtual IList<Competency> CompetencyList { get; set; }

        /// <summary>
        /// The relation Job -> JobDuty (Role: Jobduties_jobs)
        /// </summary>
        [DataMember()]
        public virtual IList<JobDuty> Jobduties_jobsJobDutyList { get; set; }

        /// <summary>
        /// The relation Job -> Job (Role: Jobs_jobs)
        /// </summary>
        [DataMember()]
        public virtual IList<Job> Jobs_jobsJobList { get; set; }

        /// <summary>
        /// The relation JobCategorie -> Job (Role: Jobs_jobcategories)
        /// </summary>
        [DataMember()]
        public virtual JobCategorie Jobs_jobcategoriesJobCategorie { get; set; }

        /// <summary>
        /// The relation JobFamily -> Job (Role: Jobs_jobfamilies)
        /// </summary>
        [DataMember()]
        public virtual JobFamily Jobs_jobfamiliesJobFamily { get; set; }

        /// <summary>
        /// The relation Job -> Job (Role: Jobs_jobs)
        /// </summary>
        [DataMember()]
        public virtual Job Jobs_jobsJob { get; set; }

        /// <summary>
        /// The relation JobType -> Job (Role: Jobs_jobtypes)
        /// </summary>
        [DataMember()]
        public virtual JobType Jobs_jobtypesJobType { get; set; }

        /// <summary>
        /// The relation Sector -> Job (Role: Jobs_sectors)
        /// </summary>
        [DataMember()]
        public virtual Sector Jobs_sectorsSector { get; set; }

        #endregion

    }

}


public static void RunSelect(this List<di.testproj.DataTransfer.Competency> list)
        {
            if (list == null) list = new List<di.testproj.DataTransfer.Competency>();
            var retval = di.testproj.Business.Objects.CompetencyCollection.RunSelect();
            foreach (di.testproj.Business.Objects.Competency item in retval)
            {
                var newItem = new di.testproj.DataTransfer.Competency();
                newItem.Fill(item);
                list.Add(newItem);
            }
        }

Any help would be great.

1

There are 1 best solutions below

2
On

I don't see anything out of the ordinary here. Maybe you can add the code from your service method and the data contract you are using.