簡體   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