0

所以我的部分工作是将文件写入 iSeries IFS,或者这个路径特别是 \ServerIPAddress\home\test\ 我有一个 ASP.NET Web 应用程序来执行此操作,这是我用来编写的代码 (C#)一个简单的文本文件到该目录:

        string filename = @"\\SomeIPAdress\home\test\test.txt";
        byte[] file = Encoding.ASCII.GetBytes("hello world");
        FileStream fs = new FileStream(filename, FileMode.OpenOrCreate);
        fs.Write(file, 0, file.Length);
        fs.Close();

执行此代码时,程序给我“拒绝访问”错误

异常详细信息:System.UnauthorizedAccessException:对路径“\SomeIPAddress\home\test\test.txt”的访问被拒绝。

ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限...

我可以使用 Windows 文件资源管理器使用 IBM UID 和密码访问此目录 \SomeIPAddress\home\test,我也可以手动创建和编辑文本文件。

我知道这与通过提供该 UID 和密码来授予对我的 ASP.NET 应用程序的访问权限有关,但我不太明白,而且我已经被困了几天。

如果您需要任何额外信息,请告诉我。谢谢您的帮助

4

3 回答 3

1

两种解决方案。最佳实践。将系列设置为使用与网络上其他所有设备相同的域控制器。然后它将知道请求访问的 asp.net 帐户并允许访问 IFS。

或者

在托管指向 IFS 的 asp.net 页面的机器上设置映射驱动器。映射的驱动器将在保管库中保存凭据。

于 2017-04-27T16:26:11.040 回答
1

感谢 Mike Wills 引导我找到解决方案。这是我用来使用 P/Invoke WNet Connection 连接到网络共享的代码,来自这里的答案

DisconnectFromShare(@"\\server-a\DBFiles", true); //Disconnect in case we are currently connected with our credentials;

ConnectToShare(@"\\server-a\DBFiles", username, password); //Connect with the new credentials

if (!Directory.Exists(@"\\server-a\DBFiles\"))
    Directory.CreateDirectory(@"\\server-a\DBFiles\"+Test);   
File.Copy("C:\Temp\abc.txt", @"\\server-a\DBFiles\");

DisconnectFromShare(@"\\server-a\DBFiles", false); //Disconnect from the server.

谢谢你们的帮助。

于 2017-04-27T18:37:31.990 回答
0

我想就是你要找的。抱歉,我无法在工作中访问我知道现在可以使用的代码。做起来真的很简单,而且效果很好。

如果你想要我的工作代码,请告诉我,我明天会拉。

更新:抱歉,我之前没有发布我的代码,我们忙于工作。

NetworkCredential nc = new NetworkCredential("user", "password", "domain");

using (new NetworkConnection(@"\\server\directory1\directory2", nc))
{
    // your IO logic here
}
于 2017-04-27T02:22:55.523 回答