RadGrid BIFF 导出 - 现有连接被远程主机强行关闭

RadGrid BIFF Export - An existing connection was forcibly closed by the remote host

我是 运行 Windows Server 2012 R2,刚从 Windows 2008 升级。

我有一个带有图像的 Telerik 网格。我最近更改了服务器,现在无法导出网格以与图像进行 biff。错误如下:

An existing connection was forcibly closed by the remote host

堆栈跟踪:

[SocketException (0x2746): An existing connection was forcibly closed by the remote host]
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +249

[IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.]
   System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) +8420333
   System.Net.FixedSizeReader.ReadPacket(Byte[] buffer, Int32 offset, Int32 count) +57
   System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) +243
   System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) +470
   System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) +8552078
   System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) +230
   System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) +645
   System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) +9
   System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) +87
   System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) +1467
   System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) +84
   System.Net.ConnectStream.WriteHeaders(Boolean async) +816

[WebException: The underlying connection was closed: An unexpected error occurred on a send.]
   System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request) +3407972
   System.Net.WebClient.DownloadData(Uri address) +214
   Telerik.Web.UI.ExportInfrastructure.Image.GetImageFromUrl() +226
   Telerik.Web.UI.ExportInfrastructure.XlsBiffRenderer.CreateWorksheet(Table tbl, Workbook wb) +2238
   Telerik.Web.UI.ExportInfrastructure.XlsBiffRenderer.Render() +198
   Telerik.Web.UI.Grid.Export.TableViewExporter.ExcelExportRenderForm(HtmlTextWriter nullWriter, Control form) +1057
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +131
   System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer) +151
   System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer) +49
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +150
   System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +131
   System.Web.UI.Page.Render(HtmlTextWriter writer) +40
   System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +150
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5363

这是一个动态创建的网格,它曾经在旧服务器上工作。

我已经确定将其缩小为以下代码。当我包含完整的 URL(这是生成图像的 ashx)时,它失败了。当我排除“https://www.someserver.com”时,它工作正常,但不会在 BIFF 中导出图像。

GridImageColumn gci = new GridImageColumn();
    gridPreview.MasterTableView.Columns.Add(gci);
    gci.HeaderText = fieldName;
    gci.UniqueName = fieldName.Replace(" ", string.Empty);
    gci.FooterText = "image";
    gci.DataImageUrlFormatString = string.Format("https://www.someserver.com/{0}{{0}}/w100/h100", cm.SiteInfo.FriendlyName);
    gci.DataImageUrlFields = new string[] { fieldName };
    gci.ImageWidth = 100;
    gci.ItemStyle.Width = 100;
    gci.HeaderStyle.Width = 100;
    gci.AllowFiltering = false;

我已经花了一整天的时间来解决这个问题,我需要一个快速的答案来解决这个问题...IIS 8 中是否有服务器设置我需要保留对失败的形象?当代码调用生成的图像时它无法访问图像是否是权限问题(听起来很荒谬,但我现在正在抓住稻草)。

我试过增加超时时间(我怀疑这无济于事,因为它很快就会失败)。我 运行 通过调试会话,它在预渲染时崩溃了。使用 JustDecompile 深入研究 Telerik,我发现它在预渲染上工作,但我认为我正在追逐我所缺少的东西。毕竟,如果它在一台服务器上工作,它应该在我将其移动到的那台服务器上工作?

它在标准 Excel 导出时效果很好,但当然不会嵌入图像。

编辑: 我使用旧数据库重新激活了旧服务器(图像仍然从新服务器中提取),但同样失败了。这排除了一切,除了 Telerik 从新服务器拉取图像的方式。我可能会回去,编辑包括图像在内的所有内容,看看错误是否改变。

再次编辑: 好吧,我把所有东西都改回了旧服务器,停止错误的一件事是将图像 URL 更改为本地 URLs 在旧服务器上。所以 - 这意味着绝对与在新服务器上抓取图像有关。 Soooo - 有什么区别?是DDOS保护吗?是权限吗? (编辑:不,不是 - 我使用了消防水管 "everyone" read/write,同样的问题)这让我发疯。

事实证明,这是 2015 年代码中的错误。随着 Telerik Tools Q1/2016 的发布,这个问题似乎得到了解决。更新后,我现在可以用 SSL 导出了。