Access files from network share in c# web app

前端 未结 5 731
终归单人心
终归单人心 2020-12-01 11:29

I have a web application that needs to read (and possibly write) files from a network share. I was wondering what the best way to do this would be?

I can\'t give the

相关标签:
5条回答
  • 2020-12-01 12:03

    You do have some options and one of of those is impersonation as you mentioned. However, another one I like to use and have used in the past is a trusted service call. Let's assume for a moment that it's always much safer to limit access through IIS to ensure there are as few holes as possible. With that let's go down this road.

    Build a WCF service that has a couple of entry points and the interface might look like this.

    public interface IDocumentService
    {
        public string BuildTrustedRelationship(string privateKey);
    
        public byte[] ReadFile(string token, string fileName);
    
        public void WriteFile(string token, string fileName, byte[] file);
    }
    

    Now, you can host this service via a Windows service very easily and so now all you need to do is on Application_start build the relationship with the service to get your token and you're off to the races. The other nice thing here is that this service is internal, trusted, and I've even hosted it on the file server before and so it's much easier to grant permissions to this operation.

    0 讨论(0)
  • 2020-12-01 12:04

    I've had no problems connecting to network shares transparently as if they were local drives. The only issue you may have is what you mentioned: having the aspnet account gain access to the share. Impersonation is probably the best way to do this.

    You should be able to use any filestream objects to access the network share as long as it has a drive letter on the server machine.

    0 讨论(0)
  • 2020-12-01 12:13

    Impersonation worked well for me in this scenario. We had a wizard that uploaded a zip file through the website, but we load balanced the site. Therefore needed to setup a way to save the file on all the machines.

    There are many different ways to do it. We decided to make all requests to run under the user we setup and just added the web.config entry and setup the security permissions on the folders for the user. This kb article explains the setup very well.

    0 讨论(0)
  • 2020-12-01 12:17

    Given everyone already has domain accounts. Try IIS integrated authentication. You will get an ugly logon box off network but your creds should pass down to the file share.

    @lomaxx
    Are you saying that only you have perms to the share or that you manually mapped it to a drive letter. If the later you can use ucn \host\share the same way you would use a c:\shared_folder.

    Random Would it be a burden to mirror the share to a local folder on the host? I hear ROBOCOPY is pretty handy.

    Another Idea. Run IIS on your target share you can read via http and if you need to write investigate webdav.

    0 讨论(0)
  • 2020-12-01 12:17

    If you can create a new AD user, I think the simplest solution is to have the Application Pool run under that AD account's authority, which would mean your application is now running as the AD user. You would need to add the AD user to the IIS Worker Process Group on the machine running your application. Then as long as your AD user has write permissions on the network share, you should be able to use the UNC path in your file operations.

    0 讨论(0)
提交回复
热议问题