[英]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.