Я написал простую службу WCF, которая принимает и сохраняет сообщения. Он отлично работает при локальном размещении. Я все еще работаю, когда размещен на IIS 6. Но когда я разрешаю службе сохранять сообщения в xml, я получаю следующую ошибку: Доступ к c:\windows\system32\inetsrv\Onno.xml был запрещен (перевод с голландского, поэтому может не совпадать с истинным английским сообщением об ошибке). Это любопытно, поскольку служба не запускается из указанного каталога. Более того, файла onno.xml нет. Служба должна создать его как
xelement.Save("onno.xml");
когда
File.Exists("onno.xml")==false
Что случилось?
- Нужно ли указывать каталог по умолчанию для файловых операций ввода-вывода внутри службы WCF, размещенной в IIS?
- Нужно ли настраивать разрешения?
Изменить: я попытался реализовать решение Mehrdad с помощью функции MapPath следующим образом:
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. Помощь?