CreateDirectory in a web service fails on remote server

970 Views Asked by At

System.IO.CreateDirectory or System.IO.File.Create won't work from a web service when navigating to the app remotely. It works locally.

Environment: - .Net 4.5, Asp.Net, C# - VS 2012

Remote: - Windows 08 R2 - IIS 7 - App Pool (.Net 4.0, Integrated)

Process:

The web service is in the project and is used in jQuery .ajax call with url: 'Services.asmx/UploadFile'. The WS method creates the folder chain (if not found) and writes the file.

The file upload works perfectly fine locally in VS. It also works perfectly when published on a remote server and navigating to it locally on the server (thru RDC) either by localhost/{app} or by http://{ip}/{app}. The folder chain is created and file is written.

However, it does not work when navigating to it normally.

I'm pretty sure it's a user permission issue but I've exhausted all options. I've assigned modify rights on the app folder in wwwroot to "NETWORK SERVICE" and even though I'm sure unnecessarily to "IIS_IUSRS", "IUSR", "LOCAL SERVICE", "NETWORK" and none have helped! I just keep getting status 500 when I navigate to it normally. But it has always worked locally as mentioned above once I gave it "NETWORK SERVICE" modify rights.

Publishing a basic test app with a button and CreateDirectory in code-behind on the same server worked after assigning modify rights to "NETWORK SERVICE" on the app folder in wwwroot.

The create directory code in the web service is:

    [WebMethod]
    public void UploadFile()
    {
        string _userId = HttpContext.Current.Request.Form["userId"];
        HttpPostedFile _file = HttpContext.Current.Request.Files["Filedata"];
        string _uploadsFolder = Server.MapPath(String.Format(ConfigurationManager.AppSettings["FileUploadPath"], _userId, "Temp"));
        if (!Directory.Exists(_uploadsFolder)) Directory.CreateDirectory(_uploadsFolder);
        FileStream _fileStream = File.Create(Path.Combine(_uploadsFolder, _file.FileName));
        _file.InputStream.CopyTo(_fileStream);
        _fileStream.Close();
    }

FileUploadPath in web.config is

When it works, it works with or without the "~/" in the path. And when it doesn't work, it's the same, with or without, it won't work.

0

There are 0 best solutions below