`
mybwu_com
  • 浏览: 192774 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

C# Windows Azure Queue的操作

 
阅读更多
Step 1 :


安装windows Azure package


Step 2 :

配置文件增加:


 <appSettings>
    <add key="StorageConnectionString" value="your connection string" />
  </appSettings>




Step 3 :


using this Azure class


namespace Axe.AzureStorage
{
    using System;
    using System.IO;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Threading;
    using System.Threading.Tasks;


    using Microsoft.WindowsAzure;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Queue;


    public class WinAzureStorageAsync
    {
        private readonly CloudQueue queue;
        private readonly int timeoutSecond;
        private CloudQueueClient queueClient;
        public CloudQueueClient QueueClient
        {
            get
            {
                if (this.queueClient != null)
                    return this.queueClient;


                var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
                this.queueClient = storageAccount.CreateCloudQueueClient();
                return this.queueClient;
            }
        }


        ////since each time fetch message is not a block operation
        ////so need to set a timeout & keep fetching , default is 3 seconds
        private const int SleepInterval = 100;


        public WinAzureStorageAsync(string queueName, int timeoutSecond = 3)
        {
            queueName = queueName.ToLower();
            this.queue = this.QueueClient.GetQueueReference(queueName);
            if (!this.QueueClient.GetQueueReference(queueName).Exists())
            {
                this.queue.CreateIfNotExists();
            }


            this.timeoutSecond = timeoutSecond;
        }


        public async Task<CloudQueueMessage> GetMessage()
        {
            CloudQueueMessage message = null;


            var passed = 0;
            
            while (message == null && passed < this.timeoutSecond * 10 * SleepInterval)
            {
                message = await this.queue.GetMessageAsync();
                Thread.Sleep(SleepInterval);
                passed += SleepInterval;
            }
            if (message == null)
            {
                throw new TimeoutException("Get Message From Azure Queue Operation has been timeout");
            }
            await this.queue.DeleteMessageAsync(message);


            return message;
        }


        public async Task<string> GetString()
        {
            var msg = await this.GetMessage();
            return msg.AsString;
        }


        public async Task<byte[]> GetBytes()
        {
            var msg = await this.GetMessage();
            return msg.AsBytes;
        }


        public T Get<T>() where T : new()
        {
            var bytes = this.GetBytes();
            return this.BytesToT<T>(bytes.Result);
        }


        public async Task Add(string message)
        {
            await this.queue.AddMessageAsync(new CloudQueueMessage(message));
        }


        public async Task Add(byte[] bytes)
        {
            await this.queue.AddMessageAsync(new CloudQueueMessage(bytes));
        }


        public void Add<T>(T obj) where T : new()
        {
            var bytes = this.TToBytes(obj);
            this.Add(bytes);
        }


        /// <summary>
        /// Note : this operation make takes around 40 seconds to complete, reference here:
        /// http://msdn.microsoft.com/library/azure/dd179387.aspx
        /// </summary>
        /// <returns></returns>
        public async Task DeleteIfExists()
        {
            await this.queue.DeleteIfExistsAsync();
        }


        public async Task<bool> IsExist(string queueName)
        {
            queueName = queueName.ToLower();
            return await this.QueueClient.GetQueueReference(queueName).ExistsAsync();
        }


        public void ClearMessage()
        {
            this.queue.Clear();
        }


        private T BytesToT<T>(byte[] bytes)
        {
            using (var ms = new MemoryStream())
            {
                ms.Write(bytes, 0, bytes.Length);
                var bf = new BinaryFormatter();
                ms.Position = 0;
                var x = bf.Deserialize(ms);
                return (T)x;
            }
        }


        private byte[] TToBytes<T>(T obj)
        {
            var bf = new BinaryFormatter();
            using (var ms = new MemoryStream())
            {
                bf.Serialize(ms, obj);
                return ms.ToArray();
            }
        }
    }
}


分享到:
评论

相关推荐

    Windows Azure的MSMQ--Queue Storage 例子

    在“QueueStorageTest”这个项目中,我们可以看到一个简单的示例,展示如何在Windows Azure中使用Queue Storage进行消息操作。这通常包括以下步骤: 1. **创建Queue客户端**: 首先,我们需要使用Azure存储SDK创建一...

    WindowsAzure Cloud Project小程序

    本项目是关于在Windows Azure平台上开发和运行C#小程序的一个示例,展示了如何利用Azure的强大功能来实现云端应用。 在云环境中,C#开发者可以通过Azure的.NET服务,如Azure Functions、Azure Web Apps或Azure ...

    Microsoft.Exam Ref 70-487.Developing Windows Azure and Web Services.2013.pdf

    - **Windows Azure Storage**:学习如何使用Blob存储、Table存储以及Queue存储来满足不同的数据存储需求。 - **SQL Azure**:介绍如何利用SQL Azure作为云中的关系型数据库服务,并实现数据访问层的设计与优化。 - *...

    云计算操作系统Windows Azure学习笔记

    1、WindowsAzure:云计算操作系统  1.1 计算服务:云上应用提供服务,.netFramework,C#,VisualBasic,C++,Java  1.1.1 三种实例:  · WebRole  · WorkerRole  · VMRole  1.2 存储服务:存储二进制和...

    一个使用Azure WebJobs作业的例子

    Azure WebJobs是一个强大的工具,常用于...通过编写C#代码并利用Azure Storage SDK,我们可以实现对Blob的自动化操作,并利用WebJobs的触发机制来响应数据变化。这不仅提高了应用程序的效率,也简化了后台任务的管理。

    使用C#处理Azure存储表

    在Visual Studio 2013中,可以使用NuGet包管理器来安装`WindowsAzure.Storage`包,这是Microsoft Azure Storage SDK的一部分,它包含了处理Azure Blob、Queue和Table服务的类库。 创建Azure Storage表的第一步是...

    omnomnom-be:学习C#和Azure的项目

    在C#方面,C#是一种面向对象的、现代的编程语言,由微软开发,主要应用于Windows平台,但现在也广泛支持跨平台开发。学习C#的内容可能包括以下几个关键点: 1. **基础语法**:如变量、数据类型、控制结构(条件语句...

    Windows Azure,云应用程序和Web托管的远征

    《Windows Azure:云应用程序与Web托管的探索之旅》 Windows Azure是微软提供的一个全面的云计算平台,它为开发者提供了一种高效、灵活的方式来构建、部署和管理应用程序。本篇文章将深入探讨Windows Azure的核心...

    MMDB.AzureSample:Windows Azure 入门示例演示应用程序

    1. **Windows Azure(现称Azure云服务)**: Microsoft的云计算平台,提供各种服务如计算、存储、数据库、网络等,支持构建、部署和管理跨多个操作系统和设备的应用。 2. **C#编程语言**: 示例代码是用C#编写的,C#...

    学习Azure功能:掌握Blob触发器和队列存储触发器

    例如,你可以创建一个函数,当新图片上传到存储容器时,自动对其进行缩放、加水印等操作。 要使用Blob触发器,你需要在C#代码中定义一个函数,并使用`BlobTrigger`特性来指定要监听的Blob路径。例如: ```csharp ...

    Azure-Storage-Queue-Message-Factory:使用Azure存储队列的工厂类示例

    这是一个用于使用Azure Storage Queue服务的示例类库。 它包括用于将字符串和对象作为队列消息发送和接收的方法。 入门 此示例内置于Visual Studio 2017的.NET v 4.62中,但可以在不更改Microsoft WindowsAzure....

    Windows Azure存储

    Windows Azure存储是微软提供的一个云存储服务,它允许开发者在全球范围内存储和访问数据。这个服务是构建在Azure平台上,为应用程序提供高可用性、可扩展性和数据持久性的解决方案。Azure存储由几个主要组件组成,...

    Sample-Queue:用于在azure服务总线上发送和接收异步消息的示例代码

    本文将深入探讨“Sample-Queue”项目,这是一个使用C#编写的示例代码,旨在演示如何在Azure服务总线上发送和接收消息。 首先,我们需要了解Azure服务总线的基本概念。Azure服务总线是一个全面的消息传递平台,它...

    HydroNotifier2:C#Azure

    - **Azure Storage**:可能用于存储项目数据,如Blob Storage用于文件存储,Table Storage用于结构化非关系型数据,或者Queue Storage用于消息队列和任务调度。 - **Azure SQL Database** 或 **Cosmos DB**:可能...

    C#做的QQ聊天工具

    1. GUI设计:C#中的Windows Forms或WPF(Windows Presentation Foundation)框架提供了丰富的控件和布局管理,用于构建聊天窗口。例如,可以使用TextBox控件显示和输入文字,Button控件执行发送消息的功能,...

    【20211203】【英文】Azure documents.pdf

    8. **存储**:Azure Storage服务,如Blob、Queue、Table和File服务的使用,以及如何通过.NET访问和操作这些存储资源。 9. **Redis Cache**:讲解如何在.NET应用中使用Azure Redis Cache以提升缓存性能。 10. **...

    Azure:在Azure中部署的项目

    例如,可以使用C#编写Azure Functions,或者创建Azure Storage客户端应用来访问Blob、Queue和Table服务。 5. **DevOps实践**:Azure提供了丰富的DevOps工具,如Azure DevOps Services(前身为VSTS)和Azure ...

    C#时尚编程100例

    20. **Azure云服务**:C#与Azure的集成,学习如何构建和部署云应用程序。 以上只是部分可能涵盖的知识点,每个实例都将深入讲解一个或多个主题,通过实践加深理解和记忆。通过《C#时尚编程100例》的学习,开发者...

    azure-tools:使用Microsoft Azure服务的工具

    SDK包含了对Azure Blob、Table、Queue存储的支持,以及对Azure Cosmos DB、Service Bus、Event Hubs等服务的接口。通过这些API,开发者可以方便地创建、管理和操作Azure资源。 Azure CLI(命令行界面)是另一个关键...

    c# 数据库 文件系统DotNetMQ_Binaries

    C#是一种面向对象的编程语言,由微软开发,主要用于构建Windows应用程序、Web应用、游戏以及移动应用等。它具有丰富的特性和强大的类型系统,是.NET框架的核心组成部分。在C#中,开发者可以方便地与数据库和文件系统...

Global site tag (gtag.js) - Google Analytics