您好,請問換上這個dll,需要再設定什麼嗎?我換上去後,我的站台會直接噴500回來給我…
您是否在您的项目中用新的(我们在之前的回复中分享过)替换了旧的 Aspose.Cells.GridWeb.Dll? 您是否发现任何异常,请分享完整的堆栈跟踪。 我们会调查并尽快回复您。
在我的iis server將Aspose.Cells.GridWeb.dll替換成withlog的版本,要開啟站台的登入頁就直接出現下方的exception了,換回原本的Aspose.Cells.GridWeb.dll,是可以正常開啟我的登入頁面的
9119ebbc-806e-409b-8d02-dcd4b0868f7e |2023/05/12 10:09:09.570 |Error|GetVPathBuildResultInternal|檔案 ‘/MetaFiT/login.aspx’ 尚未完成先行編譯,因此無法要求此檔案。|System.Web.HttpException (0x80004005): 檔案 ‘/MetaFiT/login.aspx’ 尚未完成先行編譯,因此無法要求此檔案。
於 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
於 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
於 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
於 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
於 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
於 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
於 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
於 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
尚未完成先行編譯,因此無法要求此檔案。|System.Web.HttpException (0x80004005): 檔案 ‘/MetaFiT/login.aspx’ 尚未完成先行編譯,因此無法要求此檔案。
看这个报的错root cause和GridWeb应用没有关系啊
这个login.aspx 尚未完成编译,login.aspx里面的内容是什么呢?有用到GridWeb么?
在替换新的dll后,请将整个web项目整体重新编译再打包发布
我在原本發布出來的站台中,直接將dll替換,就會出現錯誤,但換回原本的dll,就可以正常運行欸… 如果是發布編譯的問題,使用原本的dll就會噴錯了吧?
我將source重新佈署一版試試,請稍等
2023-05-12_11h20_25.png (24.3 KB)
重新部署後出現的錯誤,請問session_store_path的資料夾,只能設定在C:\inetpub\wwwroot中嗎?
2023-05-12_11h20_25.png (24.3 KB)
這是gridweb寫入的errorlog,請參考,謝謝
2023-05-12_11h30_22.png (193.9 KB)
抱歉,上面放錯圖了,gridweb報的錯是這個,請參考,謝謝
@Morris705
在你的web应用base目录下面建立tmpstorage目录
配置改成
<add key="aspose.cells.gridweb.session_store_path" value="/tmpstorage"/>
重新打包试试
2023-05-12_11h55_20.png (53.0 KB)
2023-05-12_11h55_57.png (98.6 KB)
web.config + web base目錄下都有設置,但它還是出現一樣的error
Message: session load file failed: 嘗試將空資料流還原序列化。 , 於 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
於 .(String , String )
@Morris705 有点奇怪,按照道理如果保存失败,日志里也会记录,目前日志里只有读取失败,没有保存失败的记录。
你看下日志里对应的缓存文件是空的么,你把
SessionMode = Aspose.Cells.GridWeb.SessionMode.File;设置成File模式
再操作,看下日志
SessionMode = Aspose.Cells.GridWeb.SessionMode.File;
加上這個設定後,gridweb可以正常的運行了!
但我編輯後存檔,再用微軟的excel開啟檔案,會出現這個提示,請問這是正常的嗎?
2023-05-12_13h45_35.png (11.2 KB)
不应该,你编辑的源文件请上传一下,我们来试下,看看能否浮复现
TestExcel.zip (10.9 KB)
我的操作行為是
1、從資料庫中取出binary,將binary轉成MemoryStream,放進 GridWeb1.ImportExcelFile
2、在web上用GridWeb編輯幾個cell的資料後,將GridWeb1.SaveToExcelFile至MemoryStream,再將MemoryStream轉成binary存放至資料庫
3、用我原本站台的功能,去下載資料庫中這個binary的檔案至用戶端,在用戶端用office excel打開,就會出現上面的那個提示訊息
@Morris705
我测试了下面的代码,保存出来的文件是好的,没有这样的提示,你在save to memory的时候指定下具体的格式
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
//Read all bytes into an array from the specified file.
int nBytes = (int)fs.Length;//计算流的长度
byte[] byteArray = new byte[nBytes];//初始化用于MemoryStream的Buffer
int nBytesRead = fs.Read(byteArray, 0, nBytes);//将File里的内容一次性的全部读到byteArray中去
using (MemoryStream br = new MemoryStream(byteArray))
{
GridWeb1.ImportExcelFile(br);
}
byte[] binaryout=null;
using (MemoryStream outmem = new MemoryStream())
{
//指定saveformat
GridWeb1.SaveToExcelFile(outmem, GridSaveFormat.Excel2003);
binaryout = outmem.ToArray();
}
using (FileStream fsout = new FileStream(filePath+"_new.xls", FileMode.Create))
{
fsout.Write(binaryout, 0, binaryout.Length);
}
save的時候,加上GridSaveFormat.Excel2003這個option,就沒有出現那個提示了,感謝協助