当前位置:编程学习 > C#/ASP.NET >>

asp.net网站访问映射网络驱动器的问题!

这样的 
我有一个网站放在A服务器上,网站提供下载的资源文件放在B服务器上 

B上面建立共享文件夹,A用映射网络驱动器访问B的共享文件夹 

网站程序是ASP.NET做的,现在好像访问共享文件夹的权限不够 

要如何设置,希望高人指点迷津,弄了好久了 

我对权限设置这块不是很熟悉,最好能给我说说步骤,谢谢 --------------------编程问答-------------------- 顶一下,等人解答 --------------------编程问答-------------------- 楼主你在B机器上做个WebService,A上面得程序访问B上的WebService,然后客户端就可以通过这个服务把本地的文件上传至B上,那A的网络映射驱动器就可以跟B上的文件夹同步了。 --------------------编程问答-------------------- 在B上面是不能做任何程序的。。。这个事客户那边的需求 --------------------编程问答-------------------- 如果代码没有问题的话,将B服务器上的防火墙关掉看看 --------------------编程问答-------------------- 锐娃  帮你顶 --------------------编程问答-------------------- 如果是IIS6中asp.net工作者进程是W3WP,若未启用模拟impersnation,执行代码线程的帐号默认是Network service,因此你需要将共享文件夹授予此帐号访问权限
--------------------编程问答--------------------
引用 6 楼 guilipan 的回复:
如果是IIS6中asp.net工作者进程是W3WP,若未启用模拟impersnation,执行代码线程的帐号默认是Network service,因此你需要将共享文件夹授予此帐号访问权限 

我模拟了administrator账户,并且把实验把两边的机器都设置为同样的密码,也不行 --------------------编程问答-------------------- B机器共享目录设置everyone写权限,然后需要用程序来模拟登陆B机器并创建映射:
#region 创建映射盘
        /// <summary>
        /// 需要映射的磁盘分区名称
        /// </summary>
        /// <param name="host">映射服务器的IP地址</param>
        public static void CreateSharePartition(string host)
        {
            foreach (DriveInfo a in System.IO.DriveInfo.GetDrives())
            {
                if (a.Name.ToUpper() == "Z:\\")
                {
                    return;
                }
            }

            WNetConnectionHelper.WNetAddConnection(host + "\\" + ConfigurationManager.AppSettings["UserName"], ConfigurationManager.AppSettings["Password"], ConfigurationManager.AppSettings["ShareFolder"], "Z:");

        }
        #endregion


WNetConnectionHelper代码如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Runtime.InteropServices;

namespace UserManage
{
    public static class WNetConnectionHelper
    {
        [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]

        private static extern uint WNetAddConnection2(NetResource lpNetResource, string lpPassword, string lpUsername, uint dwFlags);

        [DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2")]

        private static extern uint WNetCancelConnection2(string lpName, uint dwFlags, bool fForce);

        [StructLayout(LayoutKind.Sequential)]

        public class NetResource
        {

            public int dwScope;

            public int dwType;

            public int dwDisplayType;

            public int dwUsage;

            public string lpLocalName;

            public string lpRemoteName;

            public string lpComment;

            public string lpProvider;

        }

        public static uint WNetAddConnection(NetResource netResource, string username, string password)
        {

            uint result = WNetAddConnection2(netResource, password, username, 0);

            return result;

        }

        public static uint WNetAddConnection(string username, string password, string remoteName, string localName)
        {

            NetResource netResource = new NetResource();

            netResource.dwScope = 2;       //RESOURCE_GLOBALNET

            netResource.dwType = 1;       //RESOURCETYPE_ANY

            netResource.dwDisplayType = 3; //RESOURCEDISPLAYTYPE_GENERIC

            netResource.dwUsage = 1;       //RESOURCEUSAGE_CONNECTABLE

            netResource.lpLocalName = localName;

            netResource.lpRemoteName = remoteName.TrimEnd('\\');

            //netResource.lpRemoteName = lpComment;

            //netResource.lpProvider = null;

            uint result = WNetAddConnection2(netResource, password, username, 0);

            return result;

        }

        public static uint WNetCancelConnection(string name, uint flags, bool force)
        {

            uint nret = WNetCancelConnection2(name, flags, force);

            return nret;

        }

    }

}


最后的结果就和操作本机硬盘一样了。

分享是快乐的,祝调试成功。 --------------------编程问答--------------------
引用 7 楼 ryanshaw 的回复:
引用 6 楼 guilipan 的回复:

如果是IIS6中asp.net工作者进程是W3WP,若未启用模拟impersnation,执行代码线程的帐号默认是Network service,因此你需要将共享文件夹授予此帐号访问权限 

我模拟了administrator账户,并且把实验把两边的机器都设置为同样的密码,也不行


你是远程访问,所有帐号要前要加计算机名,管理员帐号也要加 --------------------编程问答--------------------
引用 8 楼 wszhoho 的回复:
B机器共享目录设置everyone写权限,然后需要用程序来模拟登陆B机器并创建映射: 

C# code#region 创建映射盘
        /// <summary>
        /// 需要映射的磁盘分区名称
        /// </summary>
        /// <param name="host">映射服务器的IP地址</param>
        public static void CreateSharePartition(string host)
        {
            foreach (DriveInfo a in System.IO.DriveInfo.GetDrives())
       …

不好意思。。答非所问 --------------------编程问答--------------------
引用 9 楼 guilipan 的回复:
引用 7 楼 ryanshaw 的回复:
引用 6 楼 guilipan 的回复: 

如果是IIS6中asp.net工作者进程是W3WP,若未启用模拟impersnation,执行代码线程的帐号默认是Network service,因此你需要将共享文件夹授予此帐号访问权限 

我模拟了administrator账户,并且把实验把两边的机器都设置为同样的密码,也不行 



你是远程访问,所有帐号要前要加计算机名,管理员帐号也要加

你说的是在IIS还是哪? --------------------编程问答-------------------- 文件夹右键,点击共享,然后点击权限,把你A机器上的NETWORK SERVICE帐号添加上来。 --------------------编程问答-------------------- lz真的认真看我提供的方案了吗? 你现在是手动建立映射驱动器,然后用用户名密码访问,但是出问题了,访问不了,为什么? 原因不得而知。
我给你的真正就是建立映射盘,并访问数据的一套流程,如果你用上,你的问题迎刃而解。

不好意思。。答非所问。。。。   我觉得,对于别人给你的建议,至少应该认真的思考下。 --------------------编程问答-------------------- 楼上的莫激动,他遇到的是权限问题,你的回答里面加入了everyone,其实就根本没有控制这个权限了 --------------------编程问答--------------------
引用 13 楼 wszhoho 的回复:
lz真的认真看我提供的方案了吗? 你现在是手动建立映射驱动器,然后用用户名密码访问,但是出问题了,访问不了,为什么? 原因不得而知。 
我给你的真正就是建立映射盘,并访问数据的一套流程,如果你用上,你的问题迎刃而解。 

不好意思。。答非所问。。。。  我觉得,对于别人给你的建议,至少应该认真的思考下。

谢谢你热情的给我回答,但真的不是我想要的答案,现在客户那边的需求不是让我去连接远程共享文件,而是已经建立好了映射让我去用web程序访问映射驱动器 --------------------编程问答-------------------- 没看上面的回复,不过我正好做过和你的要求一致的东西:web页面上,用户点击了某个文件,这个文件可能分布在局域网内不知道哪台服务器上,然后用户点击下载把这些文件下载到前端。

问题的关键是网络的访问问题,首先你需要知道相应的用户名和密码,然后使用的是net use命令使用网络(你在cmd中运行试试),然后用相应的File函数取得文件,用完之后net use/delete>NUL停止访问

就这样。

--------------------编程问答-------------------- 仔细看了下,看来我也答非所问了,呵呵。 --------------------编程问答-------------------- 1.
Web.Config中设置asp.net运行的帐号
<identity impersonate="true" userName="filestorage" password="123456"/>

2.
在 asp.net运行的系统和文件存储服务器的系统中新建以 filestorage 为用户名, 123456为密码的帐号,并赋予相应的权限。

3.
文件存储服务器上设置好了帐号之后,在新建一个share并赋予filestorage帐号的权限

4.
Web server的asp.net程序上就可以通过\\serverName(IP)\shareName\.. 来访问共享出来的文件夹了。



http://topic.csdn.net/u/20090429/18/903e8096-0566-4910-9b91-6e2f63ca6b04.html --------------------编程问答--------------------
引用 18 楼 jzywh 的回复:
1. 
Web.Config中设置asp.net运行的帐号 
<identity impersonate="true" userName="filestorage" password="123456"/> 

2. 
在 asp.net运行的系统和文件存储服务器的系统中新建以 filestorage 为用户名, 123456为密码的帐号,并赋予相应的权限。 

3. 
文件存储服务器上设置好了帐号之后,在新建一个share并赋予filestorage帐号的权限 

4. 
Web server的asp.net程序上就可以通过\\serverName(IP)\shareName\.. 来访…


你好,谢谢你的回答,但可能你没有理解我的意思,我是想说我用网络映射驱动器访问共享,现在我直接用\\serverName(IP)\shareName\.. 可以访问,但客户要求用映射网络驱动器,可能是那边有什么权限问题,请问你知道是什么吗? --------------------编程问答--------------------
引用 16 楼 Mark2Win 的回复:
没看上面的回复,不过我正好做过和你的要求一致的东西:web页面上,用户点击了某个文件,这个文件可能分布在局域网内不知道哪台服务器上,然后用户点击下载把这些文件下载到前端。 

问题的关键是网络的访问问题,首先你需要知道相应的用户名和密码,然后使用的是net use命令使用网络(你在cmd中运行试试),然后用相应的File函数取得文件,用完之后net use/delete>NUL停止访问 

就这样。 

你好,我的问题比你简单,可能你知道怎么做

我大部分跟你差不多,就是一点,我可以确定是局域网的某台机器,并且那台机器不会改变,由于这样的原因,所以客户需要我建立一个做网络驱动器映射到对应的共享文件夹,以便长期访问,请问你知道如何实现吗? --------------------编程问答-------------------- 我还是不清楚你到底遇到了什么问题。

1. 你的网络驱动器可以建立起来吗?
2. 你在windows里面可以访问这个网络驱动器吗?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,