【问题标题】:Problems with an ASMX Web Method that uses File I/O使用文件 I/O 的 ASMX Web 方法的问题
【发布时间】:2009-07-09 20:08:25
【问题描述】:

现在我正在处理一个项目的存根。在项目过程中,我需要能够从 Web 前端在服务器上设置消息,然后从 iPhone 查询服务器以读取消息。

虽然所有单独的部分都在工作并且我的请求正常,但我在使用此网络方法时遇到了问题

[WebMethod()]
public void setMessage(string message)
{
    FileStream file = new FileStream("mymessage.txt", FileMode.OpenOrCreate, FileAccess.Write);
    StreamWriter sw = new StreamWriter(file);
    sw.Write(message);
    sw.Close();
    file.Close();
}

当我使用 iPhone 应用程序中的 SOAP 通过 HTTP Post 调用它时。

当我发出请求时,我在控制台中得到以下 xml。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. ---&gt; Access to the path 'c:\windows\system32\inetsrv\myMessage.txt' is denied.</faultstring>
<detail />
</soap:Fault>
</soap:Body>
</soap:Envelope>

服务器是我老板配置的服务器,目前正以其他身份用作多个不同项目的内部测试服务器。

服务器是IIS服务器,不知道是什么版本,配置安装了ASP.NET。

脚本所在的位置与程序尝试编写的位置不同。我假设脚本是从那个目录运行的,这就是它试图在那里写的原因。是这样还是我错过了一些基本的东西?

如果有任何关于如何解决此问题的替代建议,我也很想听听他们的建议,因为我的知识库非常小。

谢谢!

【问题讨论】:

  • 你有什么问题?你不明白哪一部分?
  • 如果你想写入应用程序之外的某个地方,你应该指定该文件的完整路径。如果该文件在您的应用程序目录下,您可以根据需要使用Server.MapPath 转换虚拟路径(或手动指定路径,没有什么能阻止您这样做)。无论哪种情况,运行 ASP.NET 应用程序的用户帐户都应具有对该位置的写入权限。

标签: asp.net web-services soap file-io asmx


【解决方案1】:

将“filename.txt”改为

Server.MapPath("filename.txt")

或指定文件的完整物理路径并将 NTFS 权限授予 ASP.NET 用户以能够访问该文件夹。

Server.MapPath 将虚拟路径(例如~/helloworld.aspx)转换为物理路径(例如D:\WebSite\helloworld.aspx)。

【讨论】:

    【解决方案2】:

    除了将文件存储在您有权访问的文件夹中(您无法阅读邮件吗?),您还需要正确实现“使用”块:

    using (FileStream file = new FileStream("mymessage.txt", 
                        FileMode.OpenOrCreate, FileAccess.Write)) {
        using (StreamWriter sw = new StreamWriter(file)) {
            sw.Write(message);
        }
    }
    

    它写入 c:\windows\system32\inetsrv\ 的原因是这是它的默认目录。如果要写入不同的目录,则必须指定它。正如已经向您指出的那样,Server.MapPath 会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 2011-09-20
      相关资源
      最近更新 更多