0

カスタム モジュールで非常に奇妙な問題が発生し始めましたが、昨夜まで発生していませんでした。基本的に、モジュール用に作成したカスタム ビューを要求しようとすると、最初の数ページは正常に表示され、その後、アプリ プールをリサイクルするまで残りのコンテンツ アイテム ページが突然タイムアウトします。(ブラウザでは、324 データ送信なしエラーが発生します)。App_Data フォルダーの下のエラー ログにも、このイベントに関連するエラーはありません。

イベント ビューアーに表示されるエラーは次のとおりです。

3005 
   An unhandled exception has occurred. 
   12/31/2012 12:03:17 PM 
   12/31/2012 5:03:17 PM 
   59d62d1f2da347caafd2dee71266126f 
   43 
   1 
   0 
   /LM/W3SVC/10/ROOT-2-130014459492939950 
   Full 
   / 
   E:\Inetpub\Test-Website\ 
   SERVERNAME 

   24756 
   w3wp.exe 
   NT AUTHORITY\NETWORK SERVICE 
   TimeoutException 
   Transaction Timeout  
   (the url was displayed here)
   admin 
   True 
   Forms 
   NT AUTHORITY\NETWORK SERVICE 
   39 
   NT AUTHORITY\NETWORK SERVICE 
   False 

私の開発用コンピューターではこの問題は発生していません (iis または Visual Studio で Web サイトを実行しても問題は再現しません)。

各接続が効率的に破棄されるようにモジュールが設定されていることはほぼ確実です。また、サイトがアップされてから (現在約 1 か月) これが発生していないことを考えると、コードとは何の関係もないと推測しています。

以下は、サービス クラスの設定方法の例です。

    namespace Example.Services
{
    public interface IDocumentNoteService : ITransientDependency
    {
        List<DocumentNoteRecord> GetNotes(int? packageId, int noteTypeId);
    }

    public class DocumentNoteService : IDocumentNoteService
    {
        private readonly IRepository<DocumentNoteRecord> _docNoteRepo;

        public DocumentNoteService(IRepository<DocumentNoteRecord> docNoteRepo)
        {
            _docNoteRepo = docNoteRepo;
            Logger = NullLogger.Instance;
            T = NullLocalizer.Instance;
        }

        public ILogger Logger { get; set; }
        public Localizer T { get; set; }        

        public List<DocumentNoteRecord> GetNotes(int? packageId, int noteTypeId)
        {
                try {
                    var Notes = _docNoteRepo.Table.Where(x => x.Package_Id == packageId).Where(x => x.Note_Type_Id == noteTypeId).ToList();
                    _docNoteRepo.Flush();
                    return Notes;
                }
                catch (Exception ex) {
                    Logger.Error(ex, "There was a problem getting the document notes for this tour.");
                }
            return Enumerable.Empty<DocumentNoteRecord>().ToList<DocumentNoteRecord>();
        }

    }
}

パーツ ドライバーのコードは次のとおりです。

 namespace ExampleCode.Drivers
{
    public class TourPartDriver : ContentPartDriver<TourPart> {
        private readonly ITourPartService _tourPartService;
        private readonly ITourDateService _tourDateService;
        private readonly IItinDetailService _tourItinDetailsService;
        private readonly IExperiencesService _tourExpService;
        private readonly ITourOptionService _tourOptionService;
        private readonly IDestinationFactService _destinationFactService;
        private readonly IDestinationFactManager _destinationFactManager;
        private readonly IDocumentNoteService _documentNoteService;
        private readonly IPackageUpgradesService _packageUpgradesService;

         public TourPartDriver(
             ITourPartService tourService, 
             ITourDateService tourDateService,
             IItinDetailService tourItinDetailsService,
             IExperiencesService tourExpService,
             ITourOptionService tourOptionService,
             IDestinationFactService destinationFactService,
             IDestinationFactManager destinationFactManager,
             IDocumentNoteService documentNoteService,
             IPackageUpgradesService packageUpgradesService
             ) {
             _tourPartService = tourService;
             _tourDateService = tourDateService;
             _tourItinDetailsService = tourItinDetailsService;
             _tourExpService = tourExpService;
             _tourOptionService = tourOptionService;
             _destinationFactService = destinationFactService;
             _destinationFactManager = destinationFactManager;
             _documentNoteService = documentNoteService;
             _packageUpgradesService = packageUpgradesService;

             Logger = NullLogger.Instance;
             T = NullLocalizer.Instance;
         }

         public ILogger Logger { get; set; }
         public Localizer T { get; set; }

        protected override DriverResult Display(
            TourPart part, string displayType, dynamic shapeHelper) {
            return ContentShape("Parts_Tour", () => shapeHelper.Parts_Tour(
                TourID: part.tour_id,
                TourName: part.tour_name,
                PackageID: part.package_id,
                Highlights: _tourExpService.GetTourExperiences(part.tour_id, part.package_id),
                Description: part.description,
                TourDates: _tourDateService.GetTourDatesDD(part.tour_id),
                TourItinDetails: _tourItinDetailsService.GetItinDetails(part.package_id),
                InitialTourOffsetDate: _tourDateService.GetInitialTourDateOffset(part.package_id),
                TourOptions: _tourOptionService.GetInitialTourOptions(part.package_id),
                TourPrice: _tourDateService.GetTourPrice(part.package_id),
                TourNumDays: _tourItinDetailsService.GetTourNumDays(part.package_id),
                TourNumMeals: _tourDateService.GetTourNumMeals(part.package_id),
                DestinationFacts:_destinationFactManager.GetCategoryFacts(part.package_id),
                PleaseNote: _documentNoteService.GetNotes(part.package_id, (int)NoteTypes.DocNoteType.PleaseNote),
                WebRemarks: _documentNoteService.GetNotes(part.package_id, (int)NoteTypes.DocNoteType.WebRemarks),
                Pace: _documentNoteService.GetNotes(part.package_id, (int)NoteTypes.DocNoteType.Pace),
                PackageUpgrades: _packageUpgradesService.GetInitialPackageUpgrades(part.package_id)
                ));               
        }
    }
}

ビューのコードは次のとおりです。

@{

List<DocumentNoteRecord> pleaseNote = Model.PleaseNote;
List<DocumentNoteRecord> webRemarks = Model.WebRemarks;
List<DocumentNoteRecord> pace = Model.Pace;

if (pleaseNote.Count > 0)
{
    <h4 class="tourSubTitle1">Please Note</h4>
    foreach (var note in pleaseNote) {
       <p>@Html.Raw(note.Note)</p>
    }
 }

 if (webRemarks.Count > 0) {
         <h4 class="tourSubTitle1">Web Remarks</h4>
         foreach (var noteRemark in webRemarks) {
             <p>@Html.Raw(noteRemark.Note)</p>

         }
     }

if (pace.Count > 0)
{
    <h4 class="tourSubTitle1">Pace</h4>
    foreach (var notePace in pace)
    {
       <p>@Html.Raw(notePace.Note)</p>
    }
 }

}

どんな助けでも大歓迎です!私は間違いなくここでピクルスにいます。

ありがとう。

4

1 に答える 1

0

ビューにレコードを渡さないでください。これを行うと、データベース コンテキストがキャプチャされ、接続リークまたはさらに悪化する可能性があります。ビューモデルに似ていて永続エンティティを含まないプレーンなオブジェクトでシェイプを構築します。

于 2013-01-01T00:24:53.147 に答える