2013-05-31 37 views
3

我使用FilePathResult像这样:FilePathResult与网络路径抛出收到COMException(句柄是无效)

return new FilePathResult(path, "text/xml"); 

我的路是我们的网络上其他地方的路径。这会导致服务器错误。当我检查服务器上的事件日志中我可以看到这个错误项:

TransmitFile failed. File Name: \\our\path\to\the\file\filename.dfxp, HRESULT: 0x80070005 

同时在事件查看器中记录以及警告:

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 5/30/2013 4:05:03 PM 
Event time (UTC): 5/30/2013 9:05:03 PM 
Event ID: d77e5b799b87455f9f4daa7367f1bad2 
Event sequence: 33 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/3/ROOT-1-130144212630349792 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: C:\inetpub\wwwroot\my.site.folder\ 
    Machine name: MyMachine 

Process information: 
    Process ID: 3408 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\my.site.name 

Exception information: 
    Exception type: COMException 
    Exception message: The handle is invalid. (Exception from HRESULT: 0x80070006 (E_HANDLE)) 



Request information: 
    Request URL: http://my.site.com/Download/fca4fd06-d942-4ee8-8fe3-7ec7aa26938f 
    Request path: /Download/fca4fd06-d942-4ee8-8fe3-7ec7aa26938f 
    User host address: 10.0.70.17 
    User: [email protected] 
    Is authenticated: True 
    Authentication Type: Forms 
    Thread account name: OURDOMAIN\SA-ACCOUNT 

Thread information: 
    Thread ID: 14 
    Thread account name: OURDOMAIN\SA-ACCOUNT 
    Is impersonating: False 
    Stack trace: 

我的服务帐户的应用程序正在运行下具有对文件夹位置的读取权限。我没有发现在ASP.NET MVC世界其他地方提到的这个问题,所以我想我会问这里。

回答

4

可能还为时过早,但是,它仿佛从FilePathResult更改为FileContentResult已经解决了这一问题。

var fileBytes = System.IO.File.ReadAllBytes(fileInfo.FullName); 
return new FileContentResult(fileBytes, "text/xml") 

我不知道什么FilePathResult结束了在内部做,但是,读文件,ReadAllBytes似乎在回避这个问题。

+1

不错,这对我很有用。谢谢 – Francisco

+0

ReadAllBytes将整个文件读入内存,对大文件不好。此解决方案没有:http://stackoverflow.com/questions/2645302/impersonation-in-asp-net-mvc – mxmissile

+0

这工作soooooo以及;) –

相关问题