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,因此你需要将共享文件夹授予此帐号访问权限
--------------------编程问答--------------------
我模拟了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;
}
}
}
最后的结果就和操作本机硬盘一样了。
分享是快乐的,祝调试成功。 --------------------编程问答--------------------
你是远程访问,所有帐号要前要加计算机名,管理员帐号也要加 --------------------编程问答--------------------
不好意思。。答非所问 --------------------编程问答--------------------
你说的是在IIS还是哪? --------------------编程问答-------------------- 文件夹右键,点击共享,然后点击权限,把你A机器上的NETWORK SERVICE帐号添加上来。 --------------------编程问答-------------------- lz真的认真看我提供的方案了吗? 你现在是手动建立映射驱动器,然后用用户名密码访问,但是出问题了,访问不了,为什么? 原因不得而知。
我给你的真正就是建立映射盘,并访问数据的一套流程,如果你用上,你的问题迎刃而解。
不好意思。。答非所问。。。。 我觉得,对于别人给你的建议,至少应该认真的思考下。 --------------------编程问答-------------------- 楼上的莫激动,他遇到的是权限问题,你的回答里面加入了everyone,其实就根本没有控制这个权限了 --------------------编程问答--------------------
谢谢你热情的给我回答,但真的不是我想要的答案,现在客户那边的需求不是让我去连接远程共享文件,而是已经建立好了映射让我去用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 --------------------编程问答--------------------
你好,谢谢你的回答,但可能你没有理解我的意思,我是想说我用网络映射驱动器访问共享,现在我直接用\\serverName(IP)\shareName\.. 可以访问,但客户要求用映射网络驱动器,可能是那边有什么权限问题,请问你知道是什么吗? --------------------编程问答--------------------
你好,我的问题比你简单,可能你知道怎么做
我大部分跟你差不多,就是一点,我可以确定是局域网的某台机器,并且那台机器不会改变,由于这样的原因,所以客户需要我建立一个做网络驱动器映射到对应的共享文件夹,以便长期访问,请问你知道如何实现吗? --------------------编程问答-------------------- 我还是不清楚你到底遇到了什么问题。
1. 你的网络驱动器可以建立起来吗?
2. 你在windows里面可以访问这个网络驱动器吗?
补充:.NET技术 , ASP.NET