楼主你在B机器上做个WebService,A上面得程序访问B上的WebService,然后客户端就可以通过这个服务把本地的文件上传至B上,那A的网络映射驱动器就可以跟B上的文件夹同步了。

解决方案 »

  1.   

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

  2.   

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

  3.   

    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:");        }
            #endregionWNetConnectionHelper代码如下:
    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;        }    }}
    最后的结果就和操作本机硬盘一样了。分享是快乐的,祝调试成功。
      

  4.   

    文件夹右键,点击共享,然后点击权限,把你A机器上的NETWORK SERVICE帐号添加上来。
      

  5.   

    楼上的莫激动,他遇到的是权限问题,你的回答里面加入了everyone,其实就根本没有控制这个权限了
      

  6.   

    谢谢你热情的给我回答,但真的不是我想要的答案,现在客户那边的需求不是让我去连接远程共享文件,而是已经建立好了映射让我去用web程序访问映射驱动器
      

  7.   

    没看上面的回复,不过我正好做过和你的要求一致的东西:web页面上,用户点击了某个文件,这个文件可能分布在局域网内不知道哪台服务器上,然后用户点击下载把这些文件下载到前端。问题的关键是网络的访问问题,首先你需要知道相应的用户名和密码,然后使用的是net use命令使用网络(你在cmd中运行试试),然后用相应的File函数取得文件,用完之后net use/delete>NUL停止访问就这样。
      

  8.   

    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
      

  9.   


    你好,谢谢你的回答,但可能你没有理解我的意思,我是想说我用网络映射驱动器访问共享,现在我直接用\\serverName(IP)\shareName\.. 可以访问,但客户要求用映射网络驱动器,可能是那边有什么权限问题,请问你知道是什么吗?
      

  10.   

    我还是不清楚你到底遇到了什么问题。1. 你的网络驱动器可以建立起来吗?
    2. 你在windows里面可以访问这个网络驱动器吗?