Следующий код прекрасно работает под Cassini, но совсем не под IIS.Я получаю file not found
и не могу получить файлы на удаленном общем ресурсе или локально, когда я тестировал C: \ test.pdf (для проверки разрешений IIS)
Цель этого приложения - создать HTTPпрокси, который позволит получать файлы через защищенный URL.Код безопасности был опущен в этом примере.Я просто сосредотачиваюсь на доступе к файлам в этом простом примере.
Я убедился, что в пуле приложений
- (идентификация модели процесса) работает учетная запись администратора домена
- Учетные данные физического пути веб-сайта работают под одной и той же учетной записью администратора
- Учетная запись администратора обладает правами
Batch
и Run as a Service
в локальной политике.
Я получаю доступ к службе WCF, используя следующий URL
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;