2009-07-09 52 views
0

現在我正在研究一個項目的存根。在項目過程中,我需要能夠從Web前端在服務器上設置消息,然後從iPhone上查詢服務器以讀取消息。使用文件I/O的ASMX Web方法的問題

雖然所有的個人peices正在和我的要求是要通過罰款,我使用這個的WebMethod

[WebMethod()] 
public void setMessage(string message) 
{ 
    FileStream file = new FileStream("mymessage.txt", FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter sw = new StreamWriter(file); 
    sw.Write(message); 
    sw.Close(); 
    file.Close(); 
} 

有問題當我使用SOAP從一個iPhone應用程序調用此通過HTTP POST。

當我發出請求時,我在控制檯中得到以下xml。

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<soap:Fault> 
<faultcode>soap:Server</faultcode> 
<faultstring>Server was unable to process request. ---&gt; Access to the path 'c:\windows\system32\inetsrv\myMessage.txt' is denied.</faultstring> 
<detail /> 
</soap:Fault> 
</soap:Body> 
</soap:Envelope> 

服務器是一個由我的老闆配置,當前正在以其他身份作爲幾個不同的項目在房子測試服務器。

服務器是IIS服務器我不知道什麼版本,與ASP.NET配置和安裝。

腳本位於與程序試圖編寫的不同位置。我假設腳本正在從該目錄運行,這就是爲什麼它試圖在那裏寫。是這種情況還是我錯過了一些基本的東西?

如果我還有什麼其他建議可以解決這個問題,我也很樂意聽到他們的聲音,因爲我工作的是一個非常小的知識庫。

謝謝!

+0

你的問題是什麼?你不瞭解什麼部分? – 2009-07-09 20:10:38

回答

4

更改「filename.txt」到

Server.MapPath("filename.txt") 

或指定文件的完整物理路徑,並授予NTFS權限ASP.NET用戶能夠訪問該文件夾。

Server.MapPath將虛擬路徑(例如~/helloworld.aspx)轉換爲物理路徑(例如D:\WebSite\helloworld.aspx)。

1

除了文件存儲在文件夾中您可以訪問(是你無法閱讀該郵件?),你需要正確地實現「用」塊:

using (FileStream file = new FileStream("mymessage.txt", 
        FileMode.OpenOrCreate, FileAccess.Write)) { 
    using (StreamWriter sw = new StreamWriter(file)) { 
     sw.Write(message); 
    } 
} 

原因它寫入到c:\ windows \ system32 \ inetsrv \是這是它的默認目錄。如果你想寫一個不同的目錄,那麼你需要指定它。正如已經指出的那樣,Server.MapPath將會這樣做。