从我的 ASP.NET 网络应用程序向 IBM iSeries IFS 写入一个简单的文本文件

Write a simple text file to IBM iSeries IFS from my ASP.NET web app

所以我的部分工作是将文件写入 iSeries IFS,或者特别是此路径 \ServerIPAddress\home\test\ 我有一个 ASP.NET 网络应用程序来执行此操作,这是我用来将简单文本文件写入该目录的代码 (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();

执行这段代码时,程序出现“拒绝访问”错误

Exception Details: System.UnauthorizedAccessException: Access to the path '\SomeIPAddress\home\test\test.txt' is denied.

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity ...

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

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

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

我想 this 就是您要找的。抱歉,我无法访问我现在知道有效的工作代码。做起来真的很简单,而且效果很好。

如果你想要我的工作代码,请告诉我,我会在明天提取它。

更新:抱歉,我之前没有post我的代码,我们工作太忙了。

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

using (new NetworkConnection(@"\server\directory1\directory2", nc))
{
    // your IO logic here
}

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

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

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

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.

感谢大家的帮助。