小编Mic*_*bin的帖子

使用嵌套异步调用进行锁定

我正在开发一个多线程WindowsPhone8应用程序,它在异步方法中有关键部分.

有没有人知道在C#中正确使用信号量/互斥量的方法,你在使用嵌套的异步调用,其中内部方法可能获取它已经获取了调用堆栈的相同锁?我认为SemaphoreSlim可能是答案,但看起来它会导致死锁.

public class Foo
{
    SemaphoreSlim _lock = new SemaphoreSlim(1);

    public async Task Bar()
    {
        await _lock.WaitAsync();

        await BarInternal();

        _lock.Release();
     }

    public async Task BarInternal()
    {
        await _lock.WaitAsync();  // deadlock

        // DO work

        _lock.Release();
     }

}
Run Code Online (Sandbox Code Playgroud)

c# semaphore async-await windows-phone-8

11
推荐指数
2
解决办法
3331
查看次数

HttpClient HttpResponseMessage地址/ URI

我正在开发一个C#WinRT应用程序,它向Web服务器发出POST和GET请求.

有没有人知道在使用HttpClient对象时是否有办法获取响应URI /地址?

如果我使用HttpWebRequest/HttpWebResponse类,那么我可以获取此信息(通过HttpWebResponse中的ResponseUri属性),但我没有看到如何使用HttpClient/HttpResponseMessage类获取它.

谢谢

c# httpclient windows-runtime .net-4.5

6
推荐指数
1
解决办法
4278
查看次数

CloudBlockBlob.DownloadTextAsync 返回无效文本

我使用 azure blob 存储来存储 JSON 文件,并在我的代码中使用 C# API 下载它。

当我下载文本文件的内容并尝试使用 JsonConvert 对其进行反序列化时,出现错误(Visual Studio JSON 可视化工具也显示文本错误)。但是,如果我复制文本并粘贴到 JSONLint.com 中,它看起来很好。此外,如果我从 Azure 存储手动下载文件并在代码中读取文件,它反序列化就好了。有什么想法为什么我在使用 C# API 下载时得到无效数据?

var storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(folderAndFileName);
var text =  await blob.DownloadTextAsync();
var obj = JsonConvert.DeserializeObject(text);
// Exception: "Unexpected character encountered while parsing value: . Path '', line 0, position 0."
Run Code Online (Sandbox Code Playgroud)

注意:我正在通过 Powershell 上传文件:

$blobProperties = @{"ContentType" = "application/json"};
Set-AzureStorageBlobContent -Container $containerName -File  $LocalFilePath -Blob $RemoteBlobName -BlobType "Block" -Properties …
Run Code Online (Sandbox Code Playgroud)

c# json azure azure-storage-blobs

6
推荐指数
1
解决办法
1267
查看次数

使用基于live.com的帐户验证用户时出现AADSTS50020错误

我正在开发一个为客户管理azure资源的应用程序(配置VM,创建VNets).

我们在azure门户中创建了一个多租户应用程序,该应用程序配置为Windows Azure Service Management API和Windows Azure Active Directory的委派权限.

我们可以毫无问题地登录基于AAD的帐户.但是当基于live.com的帐户登录时,用户会收到AADSTS50020错误.

我们登录时,我们 使用以下参数导航到https://login.microsoftonline.com/common/OAuth2/Authorize:

client_id=XXX&response_mode=query&response_type=code&redirect_uri=XXX&prompt=consent
Run Code Online (Sandbox Code Playgroud)

这是完整的错误消息:

AADSTS50020:来自身份提供商'live.com'的用户帐户'xxx@hotmail.com'在租户'XXX'中不存在,并且无法访问该租户中的应用程序'xxx'.该帐户需要首先作为外部用户添加到租户中.注销并使用其他Azure Active Directory用户帐户重新登录.

azure azure-active-directory azure-web-app-service

5
推荐指数
1
解决办法
817
查看次数

CloudPageBlob StartCopyAsync失败,状态为404

我遇到了一个问题,我试图将CloudPageBlob复制到另一个Azure订阅中的存储帐户.出于某种原因,当我进行复制调用时,我一直收到404错误:

CloudBlobContainer destContainer;
CloudBlob sourceBlob;
string destBlobName;

var sourcePageBlob = sourceBlob as CloudPageBlob;
if (sourcePageBlob != null)
{
    var destBlob = destContainer.GetPageBlobReference(destBlobName);
    await destBlob.StartCopyAsync(sourcePageBlob, AccessCondition.GenerateIfExistsCondition(), AccessCondition.GenerateEmptyCondition(), new BlobRequestOptions(), new OperationContext());
    return destBlob;
}
Run Code Online (Sandbox Code Playgroud)

调用返回{"The remote server returned an error: (404) Not Found."} 但是如果我调用sourcePageBlob.Exists()它返回true.

azure azure-storage-blobs

2
推荐指数
1
解决办法
603
查看次数

使用Blob StartCopyAsync时如何获取Azure Blob的更新副本状态

我有一些C#代码将Blob从一个存储帐户复制到另一个。我注意到,当我调用时CloudBlob.StartCopyAsync,目标Blob的CopyState.Status设置为CopyStatus.Pending。有什么方法可以使我获得复制操作的更新状态?

我曾尝试await Task.Delay(TimeSpan.FromSeconds(10));在通话后添加a ,但延迟结束后,状态仍显示为待定。如果然后尝试从存储容器中重新获取Blob,则会得到CopyStatus == null

c# azure azure-storage-blobs

1
推荐指数
1
解决办法
2480
查看次数