Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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#中,如何从域外部访问域上的文件共享?_C#_File_Active Directory - Fatal编程技术网

在C#中,如何从域外部访问域上的文件共享?

在C#中,如何从域外部访问域上的文件共享?,c#,file,active-directory,C#,File,Active Directory,我有一个网络服务器,人们可以上传文件。我需要做的是将这些文件写入Active Directory域上的文件共享。问题是Web服务器不在域上 那么,最好的方法是什么呢?我本以为这会很容易,可以创建一个带有一些凭据的连接并执行。但显然不是。我找到的最接近的方法是使用WindowsIdentity.Impersonate进行模拟,但我读到的所有内容都表明,在生产环境中这是一个坏主意 有什么想法吗?我正在研究一个FTPs文件的解决方案,但这也不令人满意,还有一个后备计划 我正在(显然)windows环境

我有一个网络服务器,人们可以上传文件。我需要做的是将这些文件写入Active Directory域上的文件共享。问题是Web服务器不在域上

那么,最好的方法是什么呢?我本以为这会很容易,可以创建一个带有一些凭据的连接并执行。但显然不是。我找到的最接近的方法是使用
WindowsIdentity.Impersonate进行模拟,但我读到的所有内容都表明,在生产环境中这是一个坏主意

有什么想法吗?我正在研究一个FTPs文件的解决方案,但这也不令人满意,还有一个后备计划

我正在(显然)windows环境中使用c#和.NET4.0


编辑:我应该指出,我无法运行访问该域外部的服务器(或服务)。FTPing是一种临时解决方法。

我认为FTP解决方案比使用Windows共享更好;然而,我认为某种类型的web服务是域间文件交换的最佳选择。也就是说,如果您已经使用了
WindowsIdentity.Impersonate
,为什么不使用它呢?您在什么上下文中读到这是个坏主意?

我会让另一个程序(可能是Windows服务)从web服务文件位置拾取文件并将其移动到active directory目录。我可能会让这个过程从它们被复制到的位置执行。使它们在web服务器上的共享中可用,该共享仅对流程的用户和管理员可见

是否有任何方法可以将此文件共享映射为网络驱动程序。如果您能够做到这一点,您就不需要管理安全性,并且可以像访问本地文件一样非常轻松地访问这些文件。

模拟的唯一问题是,您让用户凭据泄漏到应该使用它们的上下文之外,如果在模拟时引发异常,这很容易发生。使用子进程执行模拟,进程边界将提供一道安全墙,防止凭据泄漏。@Ben Voigt这是一个有趣的问题。如果我最终不得不进行模拟(我可能会,ftp是一种临时措施),我肯定会这样做。我没有让它与模拟一起工作,这只是我在互联网上找到的一个选项。它的问题是有可能泄露凭证;而且,我相信它可能会有问题,因为整个程序会被伪装成它所冒充的身份。我只想访问共享,别的什么都不做。@Patches:我很确定模拟是每个线程的。。。但是,如果该线程是线程池工作线程,那么您仍然可能会遇到巨大的麻烦,因为您无法控制它的生存时间、将来可能运行的代码,甚至无法控制该代码是否是AppDomain的一部分。在您控制的线程中,问题比较少,但我仍然认为最好是一个完全独立的辅助进程。不是要成为一个完全的n00b,但我如何在我的c#类中或者在我的asp.net项目中做到这一点?哇,这比
WindowsIdentity.Impersonate
更糟糕。映射驱动器可供在web服务用户下运行的每个程序访问,而
WindowsIdentity.Impersonate
至少限于一个线程。是的,无法这样做。我当然不能从
Impersonate
向不太安全的方向发展。我更喜欢不太复杂的东西。我喜欢这个选项,因为它可以防止访问共享时出现的问题影响web应用程序。如果服务在移动文件时遇到问题(暂时性的网络问题、文件服务器关闭等等),它可以稍后再试。好的,为了让我的选项保持开放,让我们继续讨论一下。有这样的服务吗?或者你正在谈论制作一个程序并将其作为windows服务运行?是的,虽然你可能会找到或购买这样的产品,但我设想一个非常简单的服务,它使用FileSystemWatcher监视新文件,然后将文件移动到你的新位置。如果您使用Topshelf()编写它,它将作为控制台应用程序运行/测试,并作为服务运行/安装。@kenny--谢谢。我将继续编写一个
FileSystemWatcher
open作为一个选项。不幸的是,尝试做这件事看起来比我希望的要复杂得多(