File.Open не работает под управлением Windows 2008R2 IIS с учетными данными администратора.Работает под Кассини VS2010 - PullRequest
0 голосов
/ 26 января 2011

Следующий код прекрасно работает под Cassini, но совсем не под IIS.Я получаю file not found и не могу получить файлы на удаленном общем ресурсе или локально, когда я тестировал C: \ test.pdf (для проверки разрешений IIS)

Цель этого приложения - создать HTTPпрокси, который позволит получать файлы через защищенный URL.Код безопасности был опущен в этом примере.Я просто сосредотачиваюсь на доступе к файлам в этом простом примере.

Я убедился, что в пуле приложений

  1. (идентификация модели процесса) работает учетная запись администратора домена
  2. Учетные данные физического пути веб-сайта работают под одной и той же учетной записью администратора
  3. Учетная запись администратора обладает правами 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;

Ответы [ 2 ]

0 голосов
/ 10 февраля 2011

Приведенный выше код не работает в версии 3.5 ... просто 4.0

Изменение пула приложений на 4.0 исправило проблему и позволило мне читать с любого UNC

0 голосов
/ 26 января 2011

Под вашей тестовой системой и cassini вы работаете как ваша собственная учетная запись пользователя, которая имеет права доступа к корню диска C: \. В IIS вы работаете под специальной учетной записью, у которой нет прав доступа к корню диска C: \. Не рекомендуется размещать файлы, необходимые для вашего веб-сайта, в этом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...