远程主机关闭了连接。错误代码是0x800703E3

时间:2013-12-02 09:39:44

标签: c# asp.net nhibernate .net-3.5

我目前正在尝试使用nhibernate生成CSV。我的开发环境中不会发生此错误,但它会在其正在使用的实时网站上发生。我试着摆弄时间,但这似乎没有任何影响,因为它应该超时。时间是完全随机的,有时它会在它超时之前3秒,它将是10秒。在时间上似乎没有任何真正的一致性。

堆栈追踪:

    System.Web.HttpException: The remote host closed the connection. The error code is 0x800703E3.
    at System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError(Int32 result, Boolean throwOnDisconnect)
       at System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()
       at System.Web.HttpResponse.Flush(Boolean finalFlush)
       at Reports.CustomCSVWriter.WritetoHttpStream(String filename, Boolean header)

代码如下:

    public class ProductSpreadSheetDownload : CustomCSVWriter
    {
        protected override string[] GetCollection()
        {

            Page.Server.ScriptTimeout = 300;

            IList<Product> products = new List<Product>();
            IStockScheme stockScheme = Fabric.ObjectProvider.Get<IStockScheme>();

            ICriteria criteria = CoreHttpModule.Session.CreateCriteria(typeof(Product))
                .Add(NHibernate.Expression.Expression.IsNotNull(Product.STOCK_CODE))
                .Add(NHibernate.Expression.Expression.Eq(Product.IS_VISIBLE_ON_WEBSITE, true))
                .Add(NHibernate.Expression.Expression.Eq(Product.STOCK_TYPE, StockType.StockItem))
                .Add(NHibernate.Expression.Expression.Not(NHibernate.Expression.Expression.Like(Product.NAME, "%*%")));

            AddCustomCriteria(criteria);

            products = criteria.List<Product>();
            products = Product.RemoveOrphanedAndUnrooted((List<Product>)products);
            Product[] productArray = new Product[products.Count];
            products.CopyTo(productArray, 0);

            double?[] levels = stockScheme.GetStock(productArray, false);
            List<string> productStringList = new List<string>();

            IProductMapper mapper = Fabric.ObjectProvider.Get<IProductMapper>();
            var rootUrl = Fabric.SettingsProvider.ReadSetting<string>("RootUrl", string.Empty);
            string showOutOfStock = Page.Request.QueryString["ShowOutOfStock"];
            int minStockLevel = int.MinValue;
            if (showOutOfStock == "False")
                minStockLevel = 0;

            for (int i = 0; i < productArray.Length; i++)
            {
                if (levels[i] > minStockLevel && levels[i] != null && productArray[i].Parent != null && productArray[i].Parent.IsVisibleOnWebsite)
                {
                    StringBuilder productStringBuilder = new StringBuilder();

                    productStringBuilder.AppendFormat("{0}, ", CleanString(productArray[i].Name));
                    productStringBuilder.AppendFormat("{0}, ", CleanString(productArray[i].StockCode));
                    productStringBuilder.AppendFormat("{0}, ", levels[i]);
                    productStringBuilder.AppendFormat("{0}, ", mapper.GetUrl(productArray[i]) );
                    productStringBuilder.AppendFormat("{0}, ", CleanString(productArray[i].Category));
                    productStringBuilder.AppendFormat("{0}, ", CleanString(productArray[i].SubCategory));
                    productStringBuilder.AppendFormat("{0}, ", CleanString(mapper.GetText(productArray[i], "Description")));
                    productStringBuilder.AppendFormat("{0}, ", mapper.GetImageUrl(productArray[i], "Main"));

                    AddCustomFields(productStringBuilder, mapper);

                    productStringList.Add(productStringBuilder.ToString().Trim().TrimEnd(','));
                }
            }

            string[] productstrings = new string[productStringList.Count];
            productStringList.CopyTo(productstrings, 0);

            return productstrings;
        }

        /// <summary>
        /// Override this method to add custom criteria to the feed
        /// </summary>
        /// <example>
        /// criteria.Add(NHibernate.Expression.Expression.Eq(Product.IS_VISIBLE_ON_WEBSITE, true));
        /// </example>
        protected virtual  void AddCustomCriteria(ICriteria criteria) {}

        /// <summary>
        /// Override this method to add custom fields to the CSV output
        /// </summary>
        /// <example>
        /// productStringBuilder.AppendFormat("{0}, ", mapper.GetImageUrl(productArray[i], "Main"));
        /// </example>
        protected virtual void AddCustomFields(StringBuilder productStringBuilder, IProductMapper mapper) { }


        protected override string Headers()
        {
            string headers = "Name, Stockcode, Stock_Level, URL, Category, SubCategory, Description, Main Image URL";

            return headers;
        }

        /// <summary>
        /// Removes characters that are not safe in a CSV file.
        /// </summary>
        protected static string CleanString(string stringToClean)
        {
            return string.IsNullOrEmpty(stringToClean) ? string.Empty : stringToClean.Replace("\n", " ").Replace(',', ' ');
        }
    }
}

0 个答案:

没有答案