【问题标题】:Default Directory in a WCF service that is hosted in IIS6?IIS6 中托管的 WCF 服务中的默认目录?
【发布时间】:2009-07-11 23:03:35
【问题描述】:

我编写了一个简单的 WCF 服务来接受和存储消息。在本地托管时效果很好。在 IIS 6 上托管时我仍然可以工作。但是当我启用服务将消息存储到 xml 的功能时,我收到以下错误:访问 c:\windows\system32\inetsrv\Onno.xml 已被拒绝(翻译自荷兰语,所以可能与真正的英文错误信息不匹配)。 这很奇怪,因为服务不是从提到的目录运行的。此外,文件 onno.xml 不存在。该服务应将其创建为

xelement.Save("onno.xml");

当

File.Exists("onno.xml")==false

怎么了?

  • 是否必须为 IIS 托管的 WCF 服务中的文件 IO 操作指定默认目录?
  • 我必须调整权限吗?

编辑: 我尝试使用 MapPath 函数来实现 Mehrdad 的解决方案:

   public void Persist(Message message)
    {
        foreach (var recipient in message.Recipients)//recipient is a string
        {
            XElement xml_messages;
            string path;
            try
            {
                path = HttpContext.Current.Server.MapPath("~/"+recipient+FileExtension);
                //FileExtension=".xml"
                //Null reference exception thrown from this line
            }
            catch (Exception e)
            {
                throw new Exception("Trying to get path " + e.Message);
            }
            try
            {
                xml_messages = XElement.Load(path);
            }
            catch
            {
                xml_messages = XElement.Parse("<nothing/>");
            }
            var element = (XElement) message;
            if (xml_messages.IsEmpty)
            {
                xml_messages =
                    new XElement("messages",
                                 new XAttribute("recipient", recipient),
                                 element
                        );  
            }
            else
            {
                xml_messages.Add(element);
            }
            xml_messages.Save(path);
        }
    }

但是,我遇到了一个空引用异常?!异常是在 MapPath 行中生成的。帮忙?

【问题讨论】:

    标签: c# .net wcf iis file-io


    【解决方案1】:

    是的。您应该指定文件的完整路径。你可以使用

    System.Web.HttpContext.Current.Server.MapPath("~/onno.xml")
    

    获取文件的完整路径(如果你想写在应用程序目录中)。

    请注意,HttpContext.Current 对不在 ASP.NET compatibility mode 中运行的 WCF 服务不可用。您可以使用

    启用 ASP.NET 兼容模式
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    

    配置选项和[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 属性。但是,这会将您的 WCF 服务限制为 ASP.NET 环境。这可不是什么好事。

    或者,您可以使用基本路径的配置设置并使用

    System.IO.Path.Combine(defaultPath, "onno.xml")
    

    获取完整路径。这种解决方案更加灵活。

    此外,该位置的 NTFS 写入权限应授予运行应用程序池的用户帐户。

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 2012-01-09
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多