[英]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
怎么了?
编辑:我试图通过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.