2017-10-12 17 views
0

Azure Windows Server 2016 VMで実行中のサービスを作成しました。キューからジョブを取得すると、PDFを生成してディスクに保存する別のプログラムが生成されます。私は設定ファイルを読んで、streamreader/streamwriterを使用してディスクにHTMLファイル(サードパーティのコンポーネントを使用してPDFに変換されます)を保存しています。Azureファイル共有を.Netコードから読み取る/書き込めません

しかし、のバージョンを取得し続けると、AzureファイルSMB共有へのすべてのディスクアクセスで、エラーが発生しました。ローカルディスクを使用するとうまく動作します。

私はそれが正しいパスを使用していることとパスが実際に存在することを確認しました(単にP :)。

これは、同じ場所に配置されたアプリケーションサーバーで長年実行されています。私は今すべてをAzureに移そうとしています。

私が迷っていることや間違っていることは何ですか?

編集:私はこの問題に実行していますように

が見える:https://serverfault.com/questions/177139/windows-service-cant-access-network-share

しかし、Azureのファイルと私は、ユーザーを追加することができます何のリモートサーバーが存在しないので、私はここに同じソリューションを実行することはできません。

MSDNフォーラムユーザーは、Azure Storage Client Libraryを使用して提案しています。サードパーティのPDFコンポーネントをAzure Client Storage Libraryを使用するように再プログラムすることはできません。そのため、ローカルドライブ上のすべての作業を行い、最終的なPDFファイルをAzureファイルにコピーします。

これは完全に容認できる解決策です。しかし、私はそれを取り除く方法を知らない。

+0

、あなたのコードのように(一部の詳細を示すためにあなたの質問を編集してください実際の共有設定など)。細部を見ることなく、あなたは推測を得るだけです。 –

+0

"Windowsサーバー上で実行されているサービス"とはどういう意味ですか? WindowsサービスまたはWebアプリケーションを公開しているWebアプリケーション?もう一つのポイント:P:がマップされたネットワーク共有であることを理解しました。どのユーザーの下でマッピングを作成しましたか?サービスを実行する同じユーザーですか?また、あなたが持っているエラーについての情報/完全なスタックトレースを追加する –

答えて

0

AzureファイルSMB共有への「通常の」ファイルアクセスは、サービスまたはサービスから生成されたプログラムからは実行できません。ストレージアカウントとの間でファイルをローカルドライブにプログラムでコピーすることができます。ローカルドライブを使用してファイルを作成および編集し、それらを元のストレージアカウントにコピーする必要があります。ここで

は、Azureのファイル共有にローカルファイルをコピーするためにいくつかの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 
関連する問題