我快崩溃了...我是要把查询的数据 在服务器上生成excel,然后发送到客户端下载。
现象:1.本地vs调试,可以出现下载对话框,可以正确下载。2.在03上发布后,远程访问,服务器可以生成excel,但不出现下载对话框,而是报:拒绝访问。我想应该是权限问题。于是...
cmd -> dcomcnfg -> 组件服务 -> 我的电脑 -> DCOM配置 ->Microsoft Excel Application标识:交互式用户
安全:启动和激活权限、访问权限 我都自定义,一怒之下加了everyone,能点的勾我都点了。还是不行...我又在Web.config 的<system.web> 下加了 <identity impersonate="true" />还是不行...
-----------------------我又用一个winxp系统做服务器,Dcom配置后 测试,远程访问 可以正确导出 excel...
-----------------------崩溃了,03上还要设置什么吗?google后 有人说把 machine.config 中的 UserName值 改成 "system"。我崩溃,怎么能这么干...
-----------------------我觉得程序应该没有什么问题,应该是远程访问的权限问题,但还要什么要配置的呢?
现象:1.本地vs调试,可以出现下载对话框,可以正确下载。2.在03上发布后,远程访问,服务器可以生成excel,但不出现下载对话框,而是报:拒绝访问。我想应该是权限问题。于是...
cmd -> dcomcnfg -> 组件服务 -> 我的电脑 -> DCOM配置 ->Microsoft Excel Application标识:交互式用户
安全:启动和激活权限、访问权限 我都自定义,一怒之下加了everyone,能点的勾我都点了。还是不行...我又在Web.config 的<system.web> 下加了 <identity impersonate="true" />还是不行...
-----------------------我又用一个winxp系统做服务器,Dcom配置后 测试,远程访问 可以正确导出 excel...
-----------------------崩溃了,03上还要设置什么吗?google后 有人说把 machine.config 中的 UserName值 改成 "system"。我崩溃,怎么能这么干...
-----------------------我觉得程序应该没有什么问题,应该是远程访问的权限问题,但还要什么要配置的呢?
若要授予 ASP.NET 对文件的写访问权,请在资源管理器中右击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”添加适当的用户或组。突出显示 ASP.NET 帐户,选中所需访问权限对应的框。
你操作的文件的属性
这个 我对整个文件夹 直接 everyone 然后能勾的 都勾了...
下载很简单的,别的地方也用了,文件上传后,能下载下来...
FileInfo fi = new FileInfo(Server.MapPath("UnicomInfo.xls"));
if (fi.Exists)
{
fi.Delete();
InteHel_ExcelLoadBLL.ExportReportForXLS(ds.Tables[0], Server.MapPath("mytest.xls"), Server.MapPath("UnicomInfo.xls"), dt);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(fi.FullName);
//Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
//Response.Redirect("NowkaweiData.aspx?TheOrgName=" + theorg);
}
我是直接发送生成的excel,没有涉及到临时存储啊。
能,我文件上传到03服务器上,然后就用那段简单的代码下载的...而且我用xp做服务器 测试,配置dcom 后 远程可以下载。
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(fi.Name));
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(fi.FullName);
HttpContext.Current.ApplicationInstance.CompleteRequest();
这个下载的代码 没有什么关系吧...
先声明:我们的文件也是动态生成的。文件夹并没有设置成共享!!!!!!!
iis目录共享等同于下载。。
我加了 everyone 不可以?
哥们,我分开了,但生成excel后,并没有执行跳转,而是直接报: 拒绝访问。这是怎么回事? 而且打开模板后,生成excel 速度相当慢...
在文件夹添加net services操作权限
在COM组件里配置net services 权限
通过response.write输出文件
{
string Pa=page.Server.MapPath(@"../Template_temp/"+File+"");
page.Response.AppendHeader("Content-Disposition","attachment;filename="+File+"");
page.Response.ContentType ="application/ms-excel";
page.Response.WriteFile(Pa);
page.Response.End();
}
但是我的好像就配置下那些组策略之类的就好了你看这里面的回复,能不能对你有些帮助
http://topic.csdn.net/u/20090209/15/9851234f-0c84-4894-a5da-0e460a8e30f9.html
在文件夹上右击->属性->安全->把里面的所有组或用户名删除->高级->权限->添加->找一个你觉得合适的用户加进来->选中下面的两个复选框(从父项继承... 用在此显示的...)->确定
然后再设置权限就可以了。
这个试XP的,03应该差不多。
在文件夹上右击->属性->安全->把里面的所有组或用户名删除->高级->所有者->选着administrator->(勾选 替换子容器及对象)->确定
然后再设置权限就可以了。
这个试XP的,03应该差不多。
修改下 存放生成excel文件夹的权限
你可以把生成excel和下载excel当成两件事看待,生成已经成功了,那么就解决下载呗,
1、检查excel的目录是不是再web网站下面,
2、检查文件夹的权限,不要设everyone,设netservicec就可以了,最多设iiswpg,
3、给iis加excel的MIME类型,
4、如果第三版之后能用浏览器打开,再用流下载,一定可以。
xls application/vnd.ms-excel
给iis加excel的MIME类型 ? 意义何在?
哥,everyone,netservicec,iiswpg,
我能给的都给了...
我的解决办法是;
打开dcomcnfg(在程序 -- 运行 里键入dcomcnfg就可进去(如果出现选择,选择"否")),然后找到“microsoft Excel 应用程序”,双击它,然后在它的"安全性"里,把“使用默认的使用权限”全部改成“使用自定义使用权限”,当然每个自定义使用权限都要通过对应的"编辑 --- 添加"来改写。 试试吧,
首先找到你生成的文件要放的那个文件夹--属性--安全--添加
添加用户(everyone)然后选在权限里择--完全控制,保存就ok了
或
解决办法:
在服务器上点击开始—运行—输入:Dcomcnfg然后回车,系统将弹出分布式COM配置属性窗体,在“应用程序”页里面选择“Microsoft Excel 应用程序”,点击“属性”按钮,系统将弹出该应用程序的属性窗体。在“常规”页中的身份验证级别下拉列表中选择“无”,在“安全性”页中选中“使用自定义访问权限”和“使用自定义启动权限”,然后分别点击访问用户和启动用户对应的“编辑”按钮,在里面添加用户“everyone”;最后在“身份标示”页里面选中“交互式用户”。
老哥 说的很有道理,不过我kill了,难道还不行?
#region file save workBook.SaveAs(outputFilePath, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing,false);
workBook.Close(null, null, null);
app.Workbooks.Close();
app.Application.Quit();
app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app); workSheet = null;
workBook = null;
app = null; GC.Collect();
#endregion
}
catch (System.Exception ex)
{
throw ex;
}
finally
{
#region 关闭在导出报表期间创建的Excel进程
Process[] myProcesses;
DateTime startTime;
myProcesses = Process.GetProcessesByName("Excel"); //得不到Excel进程ID,暂时只能判断进程启动时间
foreach (Process myProcess in myProcesses)
{
startTime = myProcess.StartTime; if (startTime > beforeTime && startTime < afterTime)
{
myProcess.Kill();
}
}
#endregion
解决办法:
1. "控制面板-管理工具-组件服务" 打开"组件服务"窗口
2. 依次展开左侧的树:"组件服务|计算机|DCOM配置",右击"Microsoft Excel应用程序",选择"属性"
3. 切换到"安全"tab页,将"启动和激活权限","访问权限",均设置为"自定义",然后单击"编辑"按钮将aspnet帐户添加进去.
<identity impersonate="true"/>
不要把ASPNET帐号加入Administrators组!否则后患无穷!
03应该 添加的是 network services 吧。
http://blog.csdn.net/jinkunaier/archive/2009/06/21/4286078.aspx
大哥,我上传的excel 是可以下载的。我加了 mime类型 ,生成 excel后,还是 出现 拒绝访问。
internet 来宾账户 我也加了...也勾了...还是不行,我曰...
兄弟,你真的提醒了我。 xp下 excel.exe被 kill了,但03下 并没有被kill.这应该就是关键了。
呵呵,最后我放弃了...实在搞死我了,不知道怎么回事...---------------------------------------------我换了种方法 Reading and Writing Excel using OLEDB虽然没有 using Microsoft.Office.Interop; 做出来的那么花哨,不过也省去了在服务器端安装excel的
麻烦...有得必有失...
高手们帮忙解决一下,给文件夹添加安全账户“ASPNET”已经试过了,不行。