【发布时间】: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 行中生成的。帮忙?
【问题讨论】: