programing

System.지원되지 않음자산을 생성하려고 할 때 예외 발생

padding 2023. 4. 28. 20:20
반응형

System.지원되지 않음자산을 생성하려고 할 때 예외 발생

는 사하려합니다고를 사용하려고 .Azure MediaService APIAzure Storage API순식간에API Service에서 주최하는.Azure.

을 " 자는비스을서보비냅다니로스림트사용"로 보냅니다.HttpPost이 서비스는 비디오를 내 스토리지 계정에 블롭으로 저장하고, 미디어 서비스는 비디오를 인코딩하며, 비디오에 대한 링크가 준비되면 사용자에게 반환됩니다.

하지만 내가 창조하려고 할 때Asset a System.NotSupportedException와 함께 던져집니다.

예외가 발생했습니다. '시스템'.지원되지 않음Microsoft에서는 '예외'입니다.데이터. 서비스.Client.dll 예외가 발생했습니다. '시스템'.지원되지 않음mscorlib.dlli express에 '예외'가 있습니다.exe 오류: 0 : 예외=시스템.지원되지 않음예외:이 대상 프레임워크에서는 데이터 서비스 쿼리를 통해 직접 열거할 수 없습니다.이는 열거형이 자동으로 동기화 요청을 데이터 서비스로 전송하기 때문입니다.이 프레임워크는 비동기 작업만 지원하므로 대신 BeginExecute 및 EndExecute 메서드를 호출하여 열거형을 지원하는 쿼리 결과를 얻어야 합니다.

다음 버전의 필수 종속성을 사용하고 있습니다.

Microsoft.Data.Services.Client - 5.6.2.0
Microsoft.WindowsAzure.MediaServices.Client - 3.0.0.8
Microsoft.WindowsAzure.Storage - 3.1.0.1

내 코드는 다음과 같습니다.

CloudMediaContext _context;
IAsset asset;
using (MemoryStream Ms = new MemoryStream(data.Data))
{
    _context = new CloudMediaContext("accountName", "accountKey");
    asset = await _context.Assets.CreateAsync("blobContainerName",
        AssetCreationOptions.None,CancellationToken.None);
    ...
    ...
}

data.Data에는 를포니다가 되어 있습니다.byte[]비디오의.예외는 다음과 같은 경우에 발생합니다.CreateAsync이 호출됩니다.나는 노력했다._context.Assets.Create불운하게도

중요 편집

저는 새로운 콘솔 애플리케이션을 만들고 API 서비스에서 사용하고 있는 코드를 사용하여 성공적으로 실행되었습니다.그래서 문제는 API 서비스에 있습니다.

클래스 및 메서드 정의는 다음과 같습니다.

public class UploadController : ApiController
{

    [HttpPost]
    public async Task<string> PostUpload(VideoData data)
    {
        ...
        ...
    }

다른 대안은 없나요?

를 사용하여 작업 데모를 만들 수 있었습니다.NET 4.6.1 및 다음 너겟 패키지:

[HttpPost]
public async Task<string> PostUpload()
{
    var bytes = System.Text.Encoding.UTF8.GetBytes("Test");
    var data = new VideoData { Data = bytes };
    CloudMediaContext _context;
    using (MemoryStream ms = new MemoryStream(data.Data))
    {
        var accountName = "accountName";
        var accountKey = @"primaryaccessKey";
        _context = new CloudMediaContext(accountName, accountKey);
        var asset = await _context.Assets.CreateAsync("myjblobassets", AssetCreationOptions.None, CancellationToken.None);
        //... do something with asset and ms ...
    }
    return "http://my-link";
}

참고: 업로드 파트를 시연하는 것이 아니기 때문에 여기서는 아무 바이트나 괜찮습니다. 미디어 서비스 자산을 만드는 것이 제대로 작동하는지 확인하고 있습니다.

  1. HTML 하기 »form.button이 사후 작업을 가리키는 인덱스 보기에서 실행하고 작동합니다!!!

여기에 이미지 설명 입력

참고: NAME에 새 계정의 이름을 입력합니다.미디어 서비스 계정 이름은 모두 소문자 숫자 또는 공백이 없는 문자이며 길이는 3 - 24자입니다.https://azure.microsoft.com/en-us/documentation/articles/media-services-dotnet-get-started/

정확하게 작동하지 않는 이유를 말씀드릴 수 없습니다.하지만 저는 Azure API보다 당신의 기능 구성에서 문제를 발견할 가능성이 더 높다고 생각합니다.

이 작업은 다음과 같이 수행해야 합니다.

    // Important is the return value of the function: 
    public async Task<IAsset> CreateAssetBlobAsync(CancellationToken token)
    {            
        var asset = await _context.Assets.CreateAsync("blobContainerName", AssetCreationOptions.None, CancellationToken.None); // or your 'token'

        return asset;
    }

그리고 이 비동기 함수는 다음과 같이 호출되어야 합니다.

public static async Task ProcessNewBlobAsync()
{
     // ...

     var asset = await CreateAssetBlobAsync(token);

     // ...
}

생각에 문제는 당신의 진술서일 것 같습니다.

사실은Read/Write Async의 방법.MemoryStream실제로는 어떠한 종류의 진정한 비동기식 구현도 제공하지 않습니다.그 말은 그들이 항상 동기화된다는 것을 의미합니다.

(하지만 당신은 그들 중 누구에게도 전화하지 않았습니다.아마 비동기 방식의 동기식 래퍼가 될 것 같습니다.따라서 API를 비동기 대신 동기식으로 호출합니다.이것은 단지 생각일 뿐입니다.)

다음과 같은 문장은 사용하지 않는 것이 좋습니다.async교착 상태를 방지하기 위해


"blobContainerName"이 질문을 게시할 때 작성한 조롱이였으면 합니다.대문자와 블롭 용기가 섞이지 않습니다 :)

메서드를 호출해 볼 수 있습니까?

Task<IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken)

미디어 서비스와 연결된 기본 저장 계정 이름을 전달합니다.이 예에서는 기본 스토리지 계정 이름을 쿼리하는 메서드를 호출합니다.스토리지 계정 쿼리가 비동기식으로 수행되지 않았으며 버그입니다.이 스토리지 계정 쿼리는 컨텍스트마다 한 번씩 발생하여 서버에 대한 로드를 생성하지 않습니다.앱 초기화 중에 조회하고 나중에 자산 생성 통화 내에서 사용할 수 있으면 좋을 것입니다.

언급URL : https://stackoverflow.com/questions/30553366/system-notsupportedexception-when-trying-to-create-an-asset

반응형