2017-10-12 10 views
0

Azure Windows Server 2016 VM에서 실행중인 서비스를 작성했습니다. 대기열에서 작업을 가져 오면 PDF를 생성하고 디스크에 저장하는 다른 프로그램을 생성합니다. 내가 configread 파일을 읽고 streamreader/streamwriter를 사용하여 디스크에 타사 구성 요소를 사용하여 PDF로 변환되는 HTML 파일을 저장하고 있습니다.내 .Net 코드에서 Azure 파일 공유를 읽거나 쓸 수 없습니다.

그러나 계속해서 버전을 계속 찾을 수 없습니다. Azure 파일 SMB 공유에 대한 모든 디스크 액세스에 대해 오류가 발생합니다. 로컬 디스크를 사용하면 정상적으로 작동합니다.

나는 올바른 경로를 사용하고 경로가 실제로 존재한다는 것을 두 번 확인했습니다 (간단히 P :).

이것은 여러 해 동안 함께 배치 된 응용 프로그램 서버에서 계속 실행되었습니다. 지금 모든 것을 Azure로 옮기려고합니다.

어떤 아이디어가 누락되었거나 잘못 되었습니까?

편집 : 푸른 파일로 나는에 사용자를 추가 할 수있는 원격 서버가 없기 때문에 https://serverfault.com/questions/177139/windows-service-cant-access-network-share

하지만 여기에 동일한 솔루션을 수행 할 수 없습니다 :이 문제에 실행하고 같은

이 보이는 .

Azure Storage Client Library를 사용하여 MSDN 사용자를 추천했습니다. 제 3 자 PDF 구성 요소는 Azure 클라이언트 저장소 라이브러리를 사용하도록 다시 프로그래밍 할 수 없으므로 로컬 드라이브에 대한 모든 작업을 수행 한 다음 최종 PDF 파일을 Azure 파일로 복사해야합니다.

이것은 완전히 수용 가능한 해결책 일 것입니다. 그러나 나는 그것을 어떻게 풀어 낼지 모른다.

+0

, 당신의 코드처럼 (일부 세부 사항을 표시하기 위해 질문을 수정하시기 바랍니다 실제 공유 설정 등). 세부 정보를 보지 않고도 추측을 얻을 수 있습니다. –

+0

"Windows 서버에서 실행되는 서비스"란 정확히 무엇을 의미합니까? Windows 서비스 또는 웹 서비스를 노출하는 웹 응용 프로그램? 또 다른 포인트 : P :가 매핑 된 네트워크 공유라는 것을 이해했습니다. 어떤 사용자가 매핑을 만들었습니까? 서비스를 실행하는 동일한 사용자입니까? 또한 오류에 대한 정보/전체 스택 추적을 추가하십시오. –

답변

0

서비스 또는 서비스에서 생성 된 프로그램에서 Azure 파일 SMB 공유에 대한 "일반"파일 액세스를 할 수 없습니다. 저장소 계정간에 파일을 로컬 드라이브에 프로그래밍 방식으로 복사 할 수 있습니다. 로컬 드라이브를 사용하여 파일을 만들고 편집 한 다음 다시 저장소 계정에 복사해야합니다. 여기

는 푸른 파일 공유에 로컬 파일을 복사하는 몇 가지 VB.Net 코드 (일을하지만 정리되지) :

Imports Microsoft.WindowsAzure.Storage 
Imports Microsoft.WindowsAzure.Storage.File 
Imports System.Configuration 

    Dim StorageAccount As CloudStorageAccount 
    Dim file As FileInfo 
    Dim fileClient As CloudFileClient 
    Dim share As CloudFileShare 
    Dim root As CloudFileDirectory 
    Dim dir As CloudFileDirectory 
    Dim cloudFile As CloudFile 

    Try 
     file = New FileInfo(InFileName) ' includes full path to file 
     StorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings.Get("AzureFilesConnString")) 

     fileClient = StorageAccount.CreateCloudFileClient() 
     share = fileClient.GetShareReference("sharename") 
     root = share.GetRootDirectoryReference() 
     dir = root.GetDirectoryReference("PDFs") ' Note that you apparently can't copy to the root (\) folder 

     cloudFile = dir.GetFileReference(OutFileName) ' Only the file name, not full URI 

     Using fs As FileStream = file.OpenRead() 
      cloudFile.UploadFromStream(fs) 
     End Using 
    Catch ex As StorageException 
     Debug.Print(ex.Message) 
     Debug.Print(ex.RequestInformation.Exception.ToString) 
    Catch ex As Exception 
     Debug.Print(ex.Message) 
    End Try