簡體   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