2011-10-11 2 views
1

Azure blob 저장소에 텍스트를 업로드 할 수있는 코드가 있습니다. CloudBlobClient.GetContainerReference().GetBlobReference().UploadText()을 사용합니다.ASP.NET MVC 내부에서 BLOB 저장소에 쓸 수 없습니다

string connectionString = RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"); 
CloudStorageAccount account = CloudStorageAccount.Parse(connectionString); 
CloudBlobClient blobClient = account.CreateCloudBlobClient(); 
CloudBlobContainer container = client.GetContainerReference(containerName); 
container.CreateIfNotExist(); 
DateTime currentTime = DateTime.UtcNow; 
String instanceId = RoleEnvironment.CurrentRoleInstance.Id; 
int threadId = System.Threading.Thread.CurrentThread.ManagedThreadId; 
String blobPath = String.Format("error-{0}-{1}-{2}", currentTime.Ticks, instanceId, threadId); 
container.GetBlobReference(blobPath).UploadText(textToUpload); 

지금까지 코드는 정상적으로 작동했습니다. 이제는 ASP.NET MVC2 응용 프로그램의 여러 위치에 해당 코드를 추가하여 코드를 디버그하고 코드는 아무 것도하지 않습니다. 예외도없고 새롭지도 않고 전혀 없습니다. 내가 바로 그 이후

String justUploaded = container.GetBlobReference(blobPath).DownloadText(textToUpload); 

을 획득하고 웹 페이지에 결과를 게시하려고하면 -이 다시도 예외 없다와 문자열이 비어 있습니다. 얻으려고하면

String uri = container.GetBlobReference(blobPath).Uri.ToString(); 

다시 예외가 없으며 문자열이 비어 있습니다.

매우 동일한 업로드 코드가 MVC 애플리케이션이 포함 된 동일한 웹 역할의 OnStart() 내부에서 정상적으로 작동합니다.

BLOB에 쓰기가 가능한 이유는 무엇입니까? 어떻게 해결할 수 있습니까?

+0

Global.asax Application_Start 이벤트 처리기에서 Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher 메서드 호출을 사용합니까? –

+0

@Yuriy Rozhovetskiy : 지금은 그렇게하고 있지만 도움이되지 않습니다. – sharptooth

+0

CloudStorageAccount 인스턴스를 만드는 방법은 무엇입니까? –

답변

0

그래, 문제가 해결되었습니다. 지금 Toyota Five Whys의 작은 조각.

Q왜 BLOB 저장소에 업로드 할 텍스트가 아닌 것?
위의 코드가 호출되지 않았으므로 해당되지 않습니다.

Q이유는 그 코드가 호출되지 않았습니다?
그 invokation Microsoft.WindowsAzure.ServiceRuntime는 현재 어플리케이션 도메인에로드되었는지 여부를 검출하기 위해 사용 된 반사 느슨한 연결 코드에 의존하기 때문에이 아니었다. 어셈블리가로드되지 않았으므로 코드는 blob 저장소에 액세스하려고 시도하지 않으며 "나는 Azure 모드가 아닙니다"모드로 돌아갑니다.

QWTF ??? 이전에 코드를 테스트하지 않았습니까?
MVC 앱에서는 테스트하지 않았지만 동작이 MVC 앱과는 달리 MVC 앱과는 다릅니다. 어셈블리는 이전에 테스트했던 구성으로로드되었습니다.

Q어떻게 어셈블리를로드 강제로?
확실치는 않지만 <system.web><compilation><assemblies> 아래에 추가하면 문제가 해결됩니다. Here's a question specifically about that.

관련 문제