繁体   English   中英

我可以使用内置帐户来访问IIS7中的不同网络驱动程序吗?

[英]Can I use a build-in account to access different network drivers in IIS7?

我必须使用一个怪异的IIS7 Web应用程序,该应用程序需要访问三个网络驱动程序:第一个在NAS上,另外两个是在不同Windows服务器上的共享文件夹。 但是,这个怪异的IIS Web应用程序需要使用相同的帐户来访问所有三个文件夹。 到目前为止,我已经尝试了以下组合:

  1. 使用NAS帐户访问NAS是IIS7:是
  2. 使用直通帐户访问IIS7中的NAS:是
  3. 使用Windows帐户访问IIS7中的网络驱动程序:是
  4. 使用传递帐户访问IIS7中的网络驱动程序:否

NAS帐户具有Windows不支持的IP前缀,这就是为什么我不能强制所有网络驱动器使用相同的帐户。

我不知道为什么IIS7不能使用传递帐户(LocalService,LocalSystem,NetworService或ApplicationPoolIdentify)通过Windows访问网络共享文件夹,而IIS7可以使用内置帐户访问NAS。 那没有意义。

请帮忙!


当NAS和所有三台服务器位于同一域中时,本文可以解决此问题ApplicationPoolIdentity用户无法修改Windows Server 2008中共享文件夹中的文件

转到共享文件夹–>右键单击–>属性–>安全性–>编辑–>添加(按通常情况)->选择对象类型–>检查计算机–>现在输入应用程序运行所在的计算机名称,即您发布IIS应用程序的位置。

但是我的条件没有领域。

有三种方法可以解决此问题:

1,在所有三个网络驱动程序服务器中添加相同的Windows帐户/相同的密码。

在IIS7中,将此Windows帐户用作标识。

但是,NAS帐户需要IP前缀,而Windows帐户则不允许IP前缀。 所以我不能用这个。

2,将服务器添加到同一域,允许IIS7服务器访问所有网络驱动程序服务器中的网络驱动程序。

但是,最终用户不允许我这样做。

3,最后我写了另一个IIS7 Web应用程序,它帮助怪异的IIS7 Web应用程序登录了所有存在的网络驱动程序。

最终用户必须使用一次我的Web应用程序,然后才能使用怪异的IIS7 Web应用程序。

在我的Web应用程序中,我经常使用此API:WNetAddConnection2。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.InteropServices;

namespace IISReadDiskTest
{
    public class NetworkDrive
    {
        public enum ResourceScope
        {
            RESOURCE_CONNECTED = 1,
            RESOURCE_GLOBALNET,
            RESOURCE_REMEMBERED,
            RESOURCE_RECENT,
            RESOURCE_CONTEXT
        }

        public enum ResourceType
        {
            RESOURCETYPE_ANY,
            RESOURCETYPE_DISK,
            RESOURCETYPE_PRINT,
            RESOURCETYPE_RESERVED
        }

        public enum ResourceUsage
        {
            RESOURCEUSAGE_CONNECTABLE = 0x00000001,
            RESOURCEUSAGE_CONTAINER = 0x00000002,
            RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004,
            RESOURCEUSAGE_SIBLING = 0x00000008,
            RESOURCEUSAGE_ATTACHED = 0x00000010,
            RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
        }

        public enum ResourceDisplayType
        {
            RESOURCEDISPLAYTYPE_GENERIC,
            RESOURCEDISPLAYTYPE_DOMAIN,
            RESOURCEDISPLAYTYPE_SERVER,
            RESOURCEDISPLAYTYPE_SHARE,
            RESOURCEDISPLAYTYPE_FILE,
            RESOURCEDISPLAYTYPE_GROUP,
            RESOURCEDISPLAYTYPE_NETWORK,
            RESOURCEDISPLAYTYPE_ROOT,
            RESOURCEDISPLAYTYPE_SHAREADMIN,
            RESOURCEDISPLAYTYPE_DIRECTORY,
            RESOURCEDISPLAYTYPE_TREE,
            RESOURCEDISPLAYTYPE_NDSCONTAINER
        }

        [StructLayout(LayoutKind.Sequential)]
        private class NETRESOURCE
        {
            public ResourceScope dwScope = 0;
            public ResourceType dwType = 0;
            public ResourceDisplayType dwDisplayType = 0;
            public ResourceUsage dwUsage = 0;
            public string lpLocalName = null;
            public string lpRemoteName = null;
            public string lpComment = null;
            public string lpProvider = null;
        }

        [DllImport("mpr.dll")]
        private static extern int WNetAddConnection2(NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);

        public static int MapNetworkDrive(string remotePath, string localDrive, string userName, string passWord)
        {
            NETRESOURCE myNetResource = new NETRESOURCE();
            myNetResource.lpLocalName = localDrive;
            myNetResource.lpRemoteName = remotePath;
            myNetResource.lpProvider = null;
            int result = WNetAddConnection2(myNetResource, passWord, userName, 0);
            return result;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM