C#和Mono从Raspberri Pi访问Azure?

时间:2016-02-04 01:21:13

标签: c# azure mono raspberry-pi azure-storage-blobs

我试图使用我的Respberry Pi从Azure下载blob。代码很稳定,在我的桌面上运行正常。看起来单声道没有天蓝色组件功能,但我读到你可以使用单声道来访问天蓝色,所以我想知道我是否犯了错误。

我的代码:

using System.Collections.Generic;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Configuration;

namespace CPGetFamilyPhotos
{
    class Program
    {
        static void Main(string[] args)
        {
            // Retrieve storage account from connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["AzureImagesConnection"].ConnectionString);
            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            // Retrieve a reference to a container.
            var container = blobClient.GetContainerReference("newAdverts").ListBlobs();
            // Retrieve filenames from container List
            var urls = new List<string>();
            int fileName = 1;

            foreach (var blob in container)
            {
                using (var fileStream = System.IO.File.OpenWrite(@"\home\pi\Pictures\" + fileName + ".jpg"))
                {
                    var blobReference = blobClient.GetBlobReferenceFromServer(blob.Uri);
                    blobReference.DownloadToStream(fileStream);
                    fileName++;
                }
            }

        }
    }
}

我已经构建了发布程序,并将整个发布文件夹复制到了Pi。 我已经运行了mozroots –import –ask-remove --machine

Pi上我文件夹的内容: enter image description here

错误图像(图像中有轻微重叠)。 Image1 Image2

2 个答案:

答案 0 :(得分:1)

从错误开始,您需要确保您的代码所需的所有依赖性。在这种情况下,它是Microsoft.WindowsAzure.Storage.dll

  

&#34;我已经构建了文件并将我的.exe复制到了Pi&#34;

您需要复制.exe和所有需要的dll(执行发布版本并查看您的bin文件夹)

答案 1 :(得分:1)

您的问题是根证书。如果您查看异常,它会清楚地表明它无法识别TLS连接证书。

首先尝试这里公开的解决方案:http://www.mono-project.com/docs/faq/security/

mozroots解决方案通常效果最好,只需执行它,所有证书都会更新。

如果这不能解决您的问题,您可以始终挂钩ServicePointManager.ServerCertificateValidationCallback事件并自行接受证书。