2009-07-09 3 views
0

今、私はプロジェクトのスタブを作成中です。プロジェクトの過程で、私はWebフロントエンドからサーバ上のメッセージをiPhoneに、その後iPhoneを使ってメッセージを読むことができるようにする必要があります。ファイルI/Oを使用するASMX Webメソッドの問題

すべての個々のpeicesが働いていると私の要求は、私はiPhoneアプリからSOAPを使用してHTTPポストを経由して、これを起動すると、私は

[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(); 
} 

このWebメソッドを使用してトラブルを抱えています罰金を通過している間。

リクエストをするとコンソールに次の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> 

Serverは現在、いくつかの異なるプロジェクトのための社内テストサーバーのように他の容量で使用されている私の上司で構成された1、です。

サーバーがIISサーバーです。ASP.NETの構成とインストールのバージョンがわかりません。

スクリプトは、プログラムが書き込もうとしている場所とは異なる場所にあります。私はスクリプトがそのディレクトリから実行されていると仮定し、それがそこに書き込もうとしている理由です。それが事実か、何か根本的なものが欠けていますか?

私がこれについてどうやって進むことができるかについての別の提案がある場合は、かなり小さなナレッジベースで作業しているので、私もそれを聞いてみたいと思います。

ありがとうございます!

+0

あなたの質問がありますか?どの部分が分かりませんでしたか? –

+0

アプリケーションの外のどこかに書きたい場合は、そのファイルの絶対パスを指定する必要があります。そのファイルがアプリケーションディレクトリの下にある場合は、必要に応じて 'Server.MapPath'を使って仮想パスを変換することができます(またはパスを手動で指定することもできます。いずれの場合も、ASP.NETアプリケーションを実行しているユーザーアカウントにその場所への書き込み権限が必要です。 –

答えて

4

Server.MapPath("filename.txt") 

やファイルの完全な物理パスを指定したフォルダにアクセスできるようにするにはASP.NETユーザーにNTFSのアクセス許可を与えるに変更し、「filename.txtに」。

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はこれを行います。

関連する問題