2013-05-30 2 views
0

내가 로컬 파일 시스템에서 파일을 읽는 WCF 서비스가이.NET WCF 서비스는

을 요청하기로 결정 많은 주제에보고 한 후 로컬 파일을 액세스 할 수 없습니다. 서비스가 내 컴퓨터에서 로컬로 테스트 될 때 아무런 문제가 없었습니다. 내가 IIS8에 서비스를 게시 할 때

하지만 난이 오류를 얻고있다

파일이

내가 그 ID를 사용하여 새로운 사용자와 새로운 ApplicationPool 속성을 만드는 시도를 지정 찾을 수 없습니다 서비스를 실행하고 읽으려는 폴더를 완전히 제어했지만 문제는 계속됩니다.

는 또한 심지어 새 응용 프로그램 풀의 ID로 관리자를 사용하여 시도했지만 문제 중 하나

내가 무엇을 놓치고 해결되지 않았다?

+0

오류로 인해 파일 경로가 잘못되었을 수 있습니다. 서비스가 올바른 경로로 구성되어 있는지 확인하십시오. – Igarioshka

+0

ApplicationPoolIdentity에 'ApplicationPoolIdentity'를 설정하고 여기에 결과를 게시 해 보았습니까? – Saravanan

+0

호스트 된 사이트는 시스템 리소스에 대한 제한된 액세스 권한을 가지기 때문에 동일한 가상 디렉터리를 가진 이러한 종류의 파일을 갖는 것이 좋습니다. – Saravanan

답변

0

상대 URL이 있고 응용 프로그램을 실행하는 계정에 적절한 사용 권한이 있다고 가정하면 파일에 올바른 경로 이름을 얻지 못할 수도 있습니다. 그것은 System.IO.FileInfo의 인스턴스를 반환 것

using System.IO; 

public FileInfo GetFileInfo(string filename) 
{ 
    if(filename == null) 
     throw new ArgumentNullException("filename"); 


    FileInfo info = new FileInfo(filename); 

    if(!Path.IsPathRooted(filename) && !info.Exists) 
    { 
     string[] paths = { 
        Environment.CurrentDirectory, 
        AppDomain.CurrentDomain.BaseDirectory, 
        HostingEnvironment.ApplicationPhysicalPath, 
        }; 

     foreach(var path in paths) 
     { 
      if(path != null) 
      { 
       string file = null; 
       file = Path.Combine(path, filename); 

       if(File.Exists(file)) 
       { 
        return new FileInfo(file); 
       } 
      } 
     } 
    } 

    throw new FileNotFoundException("Couldn not find the requested file", filename); 
} 

하지만 당신은 쉽게 문자열 (전체 경로)을 반환에 적응 할 수

당신은 파일의 전체 경로를 찾으려면이 뭔가를 시도 할 수 있습니다.

+0

상대 경로를 사용하고 있지 않습니다. 전체 경로를 사용하고 있습니다. –