2009-06-12 8 views
4

私は、いくつかのプロジェクトを含むVisual Studio 2008ソリューションを用意しています。 1つのプロジェクトにはWCF Serviceが導入されています。そのWCFサービスは、他のプロジェクトの1つでいくつかのコードを参照しています。そのコードは、WCFプロジェクトのフォルダにあるファイルを読み取ろうとしています。疑似プロジェクト構造:C#:Server.Mapathはファイルをどのように読み取ることができますか?

Solution 
Project1 
    myclass.cs 
    string file = Server.Mappath(""); 


Project2 
    filefolder 
    myfile.txt 

Mappathに入れる正しい構文は何ですか?私は次のようなさまざまなバリエーションを試しました:

".filefolder/myfile.txt" 
"/filefolder/myfile.txt" 
"./filefolder/myfile.txt" 
"~/filefolder/myfile.txt" 

ファイルにアクセスできない場合があります。私が考えたことの一つ:Visual Studio 2008はプロジェクトとWCFを独自のサンドボックスでIISで実行します。それが問題だろうか?セットアップと通常のIISに展開した場合は動作しますか?

+0

奇数を含める必要がなかった、私は私がProject1のにのProject2からアクセスする必要のあるファイルを移動し、それはまだカントはそれを見つけます! – Blaze

答えて

-1

問題は、WCFを起動すると、ファイルシステムがすべてbin/Debugフォルダに実行されることです。そこでMapMathを試してみると、それほどの作業はありません。パスを逆戻りしてしまった:

filedata = File.ReadAllBytes("../../filefolder/myfile.txt"); 

これはうまくいきました。すべての助けを借りてくれてありがとう!

0

最善のことは、まずこれをやってみることです。

1つのプロジェクトの配備場所を別の配備場所に結び付けたいのはなぜですか?ファイルを読み取るためにWCFサービスが必要な場合は、ファイルをWCFサービスにコピーします。

+0

Project1のすべてのデータへのアクセスが含まれています( "/ filefolder/myfile.txtの")HttpContext.Current.Server.MapPath ( "filefolder/myfile.txtの") HttpContext.Current.Server.MapPath と :私が試しました私がWCF(Project2)を購入する顧客に晒されたくないビジネスオブジェクトが含まれています。彼らが得ているのは、エンドポイントといくつかのDLLを持つWCFプロジェクトです。 – Blaze

+0

さらに、WCFサービスは、DAL/BLLプロジェクトの一部のファイルにアクセスする必要があります。これらのプロジェクトにもファイルが必要ですか?いずれの場合も、ファイルをWCFサービスと同じフォルダに置くか、WCFプロジェクトの設定ファイルにファイルのパスを入れます。 –

+0

その混乱は私が知っている。ファイルはWCFプロジェクトに格納されます(2)。 DAL/BLLプロジェクト(1)は、ファイルを読み取り、そのファイルでいくつかの操作を行い、その結果をWCFに渡してエンドポイントに出す必要があります。 – Blaze

0

よりMSDNから:次の例のパスパラメーターはスラッシュ文字で始まらないため、サンプルファイルを含むディレクトリーを基準にしてマップされています。

試してみてください。

Server.Mappath("filefolder/somefile.file"); 
+0

これはうまくいかなかった、私はすべての可能な道を試したと思う! – Blaze

2

あなたはHostingEnvironment.ApplicationPhysicalPathを使用してみましたか?

var fileInfo = new FileInfo(
    Path.Combine(new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath).Parent.Name , @"filefolder/myfile.txt")); 
2
Server.MapPath(Path.Combine(new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath).Parent.Name , "Filename.txt")); 

私のために働くようです。私は

using System.Web.Hosting; 
31
var serverPath = 
     System.Web.Hosting.HostingEnvironment.MapPath("~/filefolder/myfile.txt"); 
+0

ニース。この特定の答えは、私にトンを助けました。それは、部分的な信頼環境内で動作しますが、他の答えはそうではありません。 –

+0

この正しい答えを選択せず​​、自分勝手で自分自身の答えを選択しなかったため、Blazeに投票しない – VISHMAY