2014-01-04 2 views
0

Я загружаю видео на одну страницу asp.net, сохраняю актив в переменной сеанса, а затем на другой странице asp.net я использую этот актив, чтобы надеяться закодировать видео (используя вызовы azure media services). Я получаю сообщение об ошибке при отправке задания кодирования (with job.submit). В нем говорится, что доступ запрещен, а тип исключения: system.security.cryptography.cryptographicException.Я получаю «доступ запрещен» при отправке задания в Azure

Мне интересно, причина в том, что я создаю контекст на новой странице?

Вот код из страницы # 1:

Dim mediaServicesAccountName As String = ConfigurationManager.AppSettings("accountname") 
     Dim mediaServicesAccountKey As String = ConfigurationManager.AppSettings("accountkey") 
     Dim mediaCloud As New CloudMediaContext(mediaServicesAccountName, mediaServicesAccountKey) 
     Dim assetOptions As New AssetCreationOptions() 

     asset = mediaCloud.Assets.Create(Filename, assetOptions) 
     Session("azureasset") = asset 
     Dim assetFile As IAssetFile = asset.AssetFiles.Create(Filename)  
       Session("assetFile") = assetFile 

Вот код из страницы # 2: Sub Page_Load Dim актив Как IAsset актив = CType (Session ("azureasset"), IAsset) Dim assetname As String assetname = asset.Name 'только для отладки

_context = New CloudMediaContext(_accountName, _accountKey) 
    CreateEncodingJob(asset) 
    End Sub 

Private Function CreateEncodingJob(asset As IAsset) As IJob 
    Dim job As IJob = _context.Jobs.Create("My encoding job") 
      Dim processor As IMediaProcessor = GetLatestMediaProcessorByName("Windows Azure Media Encoder") 
    Dim task As ITask = job.Tasks.AddNew("My encoding task", processor, "H264 Broadband 720p", Microsoft.WindowsAzure.MediaServices.Client.TaskOptions.ProtectedConfiguration) 

    task.InputAssets.Add(asset) 
    ' Add an output asset to contain the results of the job. 
    ' This output is specified as AssetCreationOptions.None, which 
    ' means the output asset is not encrypted. 
    task.OutputAssets.AddNew("Output asset", AssetCreationOptions.None) 

    ' Use the following event handler to check job progress. 
    Dim ev As New EventHandler(AddressOf StateChanged) 
    AddHandler job.StateChanged, AddressOf StateChanged 
      ' Launch the job. 
    job.Submit() 

Благодарности

ответ

0

Я бы предложил только сохранить AssetID в вашей сессии. Затем вы получите ссылку IAsset из CloudMediaContext после ее создания. Используйте код, подобный этому (C#):

//var assetId = [Get this from Session, not the entire Asset object] 
var asset = _context.Assets.Where(x => x.Id.Equals(assetId)).FirstOrDefault(); 
// no configure the job with this asset.. 

Моя лучшая ставка идет к тому, что на самом деле вы снова создать CloudMediaContext, и ссылка на актив теряется. Ваш новый экземпляр Media Context ничего не знает об этом объекте ресурса, который у вас есть на вашем сеансе.

Смежные вопросы