繁体   English   中英

IIS6中托管的WCF服务中的默认目录?

[英]Default Directory in a WCF service that is hosted in IIS6?

我编写了一个简单的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行中生成。 救命?

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

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

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

请注意, HttpContext.Current不适用于不在ASP.NET兼容模式下运行的WCF服务。 您可以使用以下方式启用ASP.NET兼容模式

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

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

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

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

获得完整的路径。 该解决方案更加灵活。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM