문제

안녕하세요 저는 숨겨진 정보를 고립 된 공간에 저장해야합니다. 이를 위해 System.io.isoLated 클래스와 같은 것을 사용하고 있습니다

IsolatedStorageFile isf =     System.IO.IsolatedStorage.IsolatedStorageFile.GetStore(IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
Stream writer = new IsolatedStorageFileStream(filename, FileMode.Create, isf);

IFormatter formatter = new BinaryFormatter();
formatter.Serialize(writer, appCollection.ToString());

writer.Close();

Windows XP에서는 잘 작동하지만 Windows 2003 인 Production Server에서는 예외가 표시됩니다.

System.io.isoLatedStorage.isoLatedStorageException : 스토어 디렉토리를 만들 수 없습니다.

ASP.NET 프로젝트 폴더에 모든 사람이 전체 제어 권한이 있습니다. 관심 CSOFT.core는 저에 의해 만들어진 개인 프레임 워크입니다.

이것은 내 스택 추적입니다.

IrontStorageException : 스토어 디렉토리를 만들 수 없습니다. (Hresult의 예외 : 0x80131468)
System.io.isoLatedStorage.isoLatedStorageFile.ngetRootDir (IrlothatedStoragesCope Scope) +0
System.io.isoLatedStorage.isoLatedStorageFile.initglobalsnonRoamingUser (IrlopatedStoragesCope Scope) +97
System.io.isoLatedStorage.isoLatedStorageFile.getRootDir (IrlothatedStoragesCope Scope) +137
System.io.isoLatedStorage.isoLatedStorageFile.GetGlobalfileioperm (IrolatedStoragesCope) +213
System.io.isoLatedStorage.isoLatedStorageFile.init (IrlothatedStoragesCope Scope) +56
System.io.isoLatedStorage.isoLatedStorageFile.getStore (IrolatedStoragesCope SCOPE, DOMAINEVIDENCETYPE 타입 유형, 유형 유형의 AssemblyEvidenCetype) +59
csoft.core.io.storagehelper.save (string filename, String content) c : projectos frameworkcs csoft.core io StorageHelper.cs : 18
CSoft.Web.UI.ViewStateHelper.SerializeViewState(HttpContext context, Object state) in c:ProjectosFrameworkCSCSoft.Web.ControlsWebUIViewStateHelper.cs:65 CSoft.Web.UI.Page.SavePageStateToPersistenceMedium(Object State)에서 C : Projectos Frameworkcs Csoft.web.controls Web ui Page.cs : 302
System.Web.ui.page.saveallstate () +236
System.web.ui.page.processrequestmain (부울 포함 Beceforeasyncpoint, boolean IncludestagesSafterasyncpoint) +1099

도움이 되었습니까?

해결책 3

분리 된 스토리지 파일을 변경했습니다

사용 (IronatedStorageFile isostore = isplicatedStorageFile.getMachinestoreForassembly ()) {}

그리고이 일.

다른 팁

나는이 사용자가 이미 문제를 해결했지만 답을 찾고있는 다른 사람들에게는 문제를 해결했다는 것을 알고 있습니다. 이 게시물은 완벽하지는 않지만이 문제를 해결하는 데 필요한 것을 지적합니다.

ASP.NET을 사용하면 GetMachinestoreForAsembly가 대부분의 경우 작동하는 것으로 보이며 웹 앱에서 격리 된 스토리지를 사용할 때 원하는 모드 일 것입니다. getUsErserToreForAssembly를 사용하더라도 ASP.NET 앱을 실행하는 사용자 계정으로 격리되며 각 웹 사이트 사용자에 대해 항상 동일합니다. 각 로그인을 Windows 사용자에 매핑하지 않는 한 이렇게하면 작동합니다).

문제는 GetUserserStoreForAssembly를 사용하려고 시도하는 것입니다. 고립 된 스토리지에 대한 권한이있는 사용자가 필요하기 때문에 응용 프로그램의 기본 IIS 사용자는 이에 대한 권한을 얻지 못합니다.

두 가지 솔루션이 있습니다.

  1. getMachinestoreForAssembly를 사용하십시오

  2. GetUsuserstoreForAsSembly를 사용해야하는 경우 앱을 권한을 가진 사용자로 실행하도록 설정하십시오. 이것은 폴더 권한에 의해 해결되지 않습니다. 보안 설정을 얻는 방법에는 여러 가지가 있습니다. (IIS7) 앱 풀 또는 기본 설정> Connect 또는 Authenication> 익명 인증 아래에서 설정할 수 있습니다. 사용자가 어떤 권리를 요구하는지 정확히 잘 모르겠지만, 이것은 당신이 올바른 방향으로 갈 수있게 해줄 것입니다.

다음은 문제를 파악하는 데 도움이 될 수있는 것보다 몇 가지 보너스 코드입니다.

   Dim storageFile As IsolatedStorageFile
    If Request("storage") = "user" Then
        storageFile = IsolatedStorageFile.GetUserStoreForAssembly()
    Else
        storageFile = IsolatedStorageFile.GetMachineStoreForAssembly()
    End If

    Response.Write(storageFile.GetType.GetField("m_RootDir", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance).GetValue(storageFile).ToString())

getUserStoreForAssembly는 다음과 같습니다.

getMachinestoreForAssembly는 다음과 같습니다.

IIS에서 실행 중이며 응용 프로그램 풀 ID가 NetworkService 인 경우 애플리케이션 풀의 고급 설정으로 이동하여 "사용자 프로파일"값을 "True"로 설정하려고 시도 할 수 있습니다. 나를 위해 일했습니다.

서버에서 어떻게 실행하고 있습니까? 서버에서 서비스로 실행하는 경우 서비스를 실행하도록 할당 된 사용자에게 문제가있을 수 있습니다. 프로덕션 서버에서 사용하는 동일한 사용자로 테스트해야합니다.

John Saunders가 그의 의견에서 묻는 것처럼, 가능한 경우 예정을 던지는 줄을 포함하여 더 많은 스택 추적을 게시하십시오.

그러나 일부 사용 심령 디버깅 기술, 나는 도움이 될 수있는 몇 가지 야생 찌르기를 가져갈 것입니다.

  1. 분리 된 스터 지출은 두 가지 모두에 의해 던져 질 수 있습니다 getstore 그리고 분리 된 스토리 필 스트림 건설자
  2. "Windows XP에서 제대로 작동합니다" - (아마도 관리자) 자격 증명으로 실행되는 웹 서버에서 내장 된 Visual Studio에서 사이트를 실행할 때는 프로필이있는 사용자로서 분리 된 스토리지 폴더입니다.
  3. "그러나 생산시 예외가 발생합니다" - "네트워크 서비스"또는 프로필이없는 다른 계정에서 실행되거나 데스크탑 유형 권한과 상호 작용할 때 (세부 사항은 확실하지 않습니다. 주로 프로필은 살인자입니다).

Prodution에서 사이트가 실행되는 계정은 무엇입니까? 서버에 로그온하고 파일 시스템과 올바르게 상호 작용할 수있는 사용자가 아니라고 생각하십니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top