以下代码在Cassini下运行正常,但在IIS下根本没有。我得到file not found
,当我测试C:\ test.pdf(测试IIS权限)时,我无法获取远程共享上的文件或本地文件
此应用程序的目的是创建一个HTTP代理,允许通过安全URL检索文件。此示例中省略了安全代码。我只关注这个普通样本中的文件访问。
我确定了
Batch
和Run as a Service
权限。我使用以下网址访问WCF服务
http://localhost:1651/services/GetFile.svc/get?swt=\\remoteserver\share\file.pdf
[ServiceContract(SessionMode = SessionMode.NotAllowed)]
public interface IGetFile
{
[OperationContract]
[WebGet(UriTemplate = "/get?swt={filename}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
Stream Get(string filename);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GetFile : IGetFile
{
bool debug = true;
public Stream Get(string filename )
{
//this will cause the file dialog to show the file name instead of "get"
WebOperationContext.Current.OutgoingResponse.Headers.Add( "Content-disposition", string.Format("inline; filename={0}", filename));
WebOperationContext.Current.OutgoingResponse.ContentType = "application/octect-stream";
FileStream fs1= null;
//WindowsIdentity winId = new WindowsIdentity("aamankow@nfp.com");
//using (winId.Impersonate())
{
try
{
fs1 = File.OpenRead(filename);
}
catch (FileNotFoundException e)
{
if (debug)
throw;
else
return null;
}
catch (IOException e)
{
if (debug)
throw;
else
// message: Either a required impersonation level was not provided, or the provided impersonation level is invalid.
return null;
}
}
return fs1;
答案 0 :(得分:0)
在您的测试系统和cassini下,您将作为自己的用户帐户运行,该帐户具有C:\驱动器根目录的权限。在IIS下,您在一个特殊帐户下运行,该帐户没有C:\驱动器根目录的权限。在这个位置放置网站所需的文件是不好的做法。
答案 1 :(得分:0)
上面的代码在版本3.5上不起作用...只是4.0
将应用程序池更改为4.0修复了该问题,并允许我从任何UNC中读取