Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#web应用程序中从网络共享访问文件_C#_Asp.net_Security_Web Applications_File Io - Fatal编程技术网

在c#web应用程序中从网络共享访问文件

在c#web应用程序中从网络共享访问文件,c#,asp.net,security,web-applications,file-io,C#,Asp.net,Security,Web Applications,File Io,我有一个web应用程序,需要从网络共享中读取(并可能写入)文件。我想知道最好的方法是什么 我无法让网络服务或aspnet帐户访问网络共享。我可能会用模仿 网络共享和web应用程序都托管在同一个域上,我可以专门为此在该域上创建一个新用户,但是我不太确定如何在创建文件流和指定web应用程序中使用的凭据之间进行连接 不幸的是,该驱动器未映射为计算机上的网络驱动器,它仅作为网络共享提供给我,因此不幸的是,我无法进行透明呼叫 有一个问题,我可以想到与模拟。。。我想每个应用程序域只能模拟一个用户,但我很高

我有一个web应用程序,需要从网络共享中读取(并可能写入)文件。我想知道最好的方法是什么

我无法让网络服务或aspnet帐户访问网络共享。我可能会用模仿

网络共享和web应用程序都托管在同一个域上,我可以专门为此在该域上创建一个新用户,但是我不太确定如何在创建文件流和指定web应用程序中使用的凭据之间进行连接


不幸的是,该驱动器未映射为计算机上的网络驱动器,它仅作为网络共享提供给我,因此不幸的是,我无法进行透明呼叫

有一个问题,我可以想到与模拟。。。我想每个应用程序域只能模拟一个用户,但我很高兴被纠正。我可能需要将此文件写入多个不同的共享,这意味着我可能需要模拟多个用户


我喜欢创建令牌的想法。。。如果我能做到这一点,我将能够要求使用他们的凭据,然后动态应用安全性,并给他们有意义的错误消息,如果访问被拒绝。。。我要去玩了,但我会带着更新回来。

我可以像本地驱动器一样透明地连接到网络共享。您可能遇到的唯一问题是您提到的:让
aspnet
帐户获得对该共享的访问权。模仿可能是最好的方法


您应该能够使用任何filestream对象访问网络共享,只要它在服务器计算机上有一个驱动器号。

模拟在这种情况下对我很有效。我们有一个向导通过网站上传了一个zip文件,但是我们平衡了网站的负载。因此需要设置一种在所有机器上保存文件的方法


有很多不同的方法可以做到这一点。我们决定让所有请求在我们设置的用户下运行,只添加了web.config条目并为用户设置文件夹的安全权限。这篇文章很好地解释了这个设置。

因为每个人都有域帐户。尝试IIS集成身份验证。您将从网络上获得一个丑陋的登录框,但您的信任将传递到文件共享

@lomaxx
您是说只有您有到共享的烫发,还是手动将其映射到驱动器号。如果是后者,则可以使用ucn\host\share,方法与使用c:\shared\u文件夹相同

随机的 将共享镜像到主机上的本地文件夹会是一种负担吗?我听说机器人摄影很方便


另一个想法。在您的目标共享上运行IIS您可以通过http读取,如果您需要编写调查webdav。

您确实有一些选项,其中之一就是您提到的模拟。然而,我喜欢使用的另一种方法是可信服务调用,我过去也曾使用过这种方法。让我们暂时假设,限制通过IIS的访问总是安全得多,以确保漏洞尽可能少。有了这些,我们沿着这条路走吧

构建一个具有几个入口点的WCF服务,接口可能如下所示

public interface IDocumentService
{
    public string BuildTrustedRelationship(string privateKey);

    public byte[] ReadFile(string token, string fileName);

    public void WriteFile(string token, string fileName, byte[] file);
}

现在,您可以非常轻松地通过Windows服务托管此服务,因此现在您只需启动
Application\u start
与服务建立关系,即可获得您的代币,然后开始比赛。这里的另一个好处是,该服务是内部的、受信任的,我以前甚至在文件服务器上托管过它,因此授予此操作的权限要容易得多。

如果您可以创建一个新的广告用户,我认为最简单的解决方案是让应用程序池在该广告帐户的权限下运行,这意味着您的应用程序现在以广告用户的身份运行。您需要将AD用户添加到运行应用程序的计算机上的IIS工作进程组。然后,只要您的AD用户对网络共享具有写入权限,您就应该能够在文件操作中使用UNC路径