2011-01-26 16 views
0

次のコードは、Cassiniでは正常に動作しますが、IISでは正常に動作しません。私はfile not foundを取得し、C:\ test.pdf(IISのアクセス許可をテストする)をテストしたときにリモート共有またはローカルでファイルを取得できません。Windows 2008R2のIISでAdmin.jpgが動作しません。 VS2010の下で動作Cassini

このアプリケーションの目的は、セキュアなURLで検索されるファイル。セキュリティコードはこのサンプルから除外されています。私はちょうどこのプレーンバニラサンプルのファイルへのアクセスに焦点を当てています。

私は

  1. アプリケーションプール(プロセスモデルのアイデンティティが)
  2. ウェブサイトの物理パスの資格情報が同じ管理者アカウント
  3. 管理者アカウントで実行されているドメイン管理者アカウントを実行していることを確認してください作りましたローカルポリシーにはBatchRun as a Serviceの両方の権利があります。

私は、次のURLテストシステムとカッシーニの下

http://localhost:1651/services/GetFile.svc/get?swt=\\remoteserver\share\file.pdf

[ServiceContract(SessionMode = SessionMode.NotAllowed)] 
public interface IGetFile 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "/get?swt={filename}", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)] 
    Stream Get(string filename); 
} 


[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class GetFile : IGetFile 
{ 
    bool debug = true; 

    public Stream Get(string filename) 
    { 
     //this will cause the file dialog to show the file name instead of "get" 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-disposition", string.Format("inline; filename={0}", filename)); 
     WebOperationContext.Current.OutgoingResponse.ContentType = "application/octect-stream"; 

     FileStream fs1= null; 

     //WindowsIdentity winId = new WindowsIdentity("[email protected]"); 
     //using (winId.Impersonate()) 
     { 
      try 
      { 
       fs1 = File.OpenRead(filename); 
      } 
      catch (FileNotFoundException e) 
      { 
       if (debug) 
       throw; 
       else 
       return null; 
      } 
      catch (IOException e) 
      { 
       if (debug) 
       throw; 
       else 
       // message: Either a required impersonation level was not provided, or the provided impersonation level is invalid. 
       return null; 
      } 
     } 

     return fs1; 
+0

から読み取ることができる読み取り権限を持っていますファイル? –

+0

はい、そうです(そうでないと思わない限り)。私は、IISが実行されている権限で質問をより明確にしました。 – LamonteCristo

答えて

0

上記のコードは、バージョン3.5で動作しない...ちょうど4.0

4.0にアプリケーションプールを変更するには、問題を修正し、私はないIIS任意のUNC

0

を使用してWCFサービスにアクセスするには、rootへのアクセス権を持っている自分のユーザーアカウントとして実行していますC:\ドライブのIISでは、C:\ドライブのルートへのアクセス権を持たない特別なアカウントで実行しています。あなたのウェブサイトに必要なファイルをこの場所に置くことは貧弱な習慣です。

+0

私はIISが異なるセキュリティを使用していることを認識しています。開発IISサーバーがドメイン管理者の資格情報をどのように使用しているかについて私の質問をより明確にしました。 C:\のルートにあるファイルに関しては、問題がリモートアクセス権/接続の問題ではないことを示すだけです。私は単にファイルアクセスをテストしているだけです。私はその "生産"に行くつもりはない、私は手元にあるIISの問題を整理しようとしています。 – LamonteCristo

関連する問題