【发布时间】:2015-08-13 17:22:54
【问题描述】:
我正在尝试在Azure 中托管的API Service 中使用Azure MediaService API 和Azure Storage API。
用户将视频流以HttpPost 的形式发送到服务,服务将视频作为 blob 保存在我的存储帐户中,媒体服务对视频进行编码,当视频链接准备就绪时,它会返回到用户。
但是当我尝试创建 Asset 时,会抛出 System.NotSupportedException 并显示以下消息:
抛出异常:Microsoft.Data.Services.Client.dll 中的“System.NotSupportedException” 抛出异常:mscorlib.dll 中的“System.NotSupportedException” iisexpress.exe 错误:0:异常=System.NotSupportedException:这 目标框架不允许您直接枚举数据 服务查询。这是因为枚举会自动发送一个 对数据服务的同步请求。因为这个框架只有 支持异步操作,您必须改为调用 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)
{
...
...
}
可能有其他选择吗?
【问题讨论】:
-
嘿,我不确定 'await' 是否在使用中。你看azure.microsoft.com/de-de/documentation/articles/…了吗?
-
您好,感谢您的评论!我尝试了
Create而不是CreateAsync,但没有成功。 -
看来Create(Async)背后有一堆操作,不妨看看CreateEmptyAsset:blog-ndrouin.azurewebsites.net/creating-a-simple-media-asset
-
CreateEmptyAsset 不再存在。 Create 或 CreateAsync 是现在创建空资产的方法。还是谢谢!
-
我认为 CreateAsync 可能需要一个唯一的 id?根据文档here,他们为文件创建了一个唯一标识符。也许通过设置 AssetCreationOptions.None,您正在尝试创建一个已经存在的文件。
标签: c# azure async-await azure-blob-storage azure-media-services