GVKun编程网logo

c# – Windows Azure上的作业队列设计

16

如果您想了解c#–WindowsAzure上的作业队列设计的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.net–WindowsAzure上的AspPDF和AspJPEG、.net–在W

如果您想了解c# – Windows Azure上的作业队列设计的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于.net – Windows Azure上的AspPDF和AspJPEG、.net – 在Windows Azure上部署MPI应用程序、azure-storage – 在Windows Azure Blob存储中使用子目录、azure-storage – 无法初始化Windows Azure存储模拟器的有价值的信息。

本文目录一览:

c# – Windows Azure上的作业队列设计

c# – Windows Azure上的作业队列设计

有人成功用于在 Windows Azure上实现作业处理的设计是什么?

要求:

>能够将作业推入队列.
> N个工作人员可以从队列中使用作业并处理它们.
>工作的调用者应该能够被警告(推,而不是轮询)正在完成的工作.

迄今为止的研究:

>使用Azure服务总线队列创建“作业”队列(http://blogs.msdn.com/b/appfabric/archive/2011/05/17/an-introduction-to-service-bus-queues.aspx)
> Web前端将Jobs推送到队列,worker无限期地阻塞Receive()(参见http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.aspx),直到Job准备就绪(避免“null”长轮询,这会因API调用交易成本而花钱)

关于工作完成的通知:

>当作业完成时,没有明显的警报能力.
我认为我可以利用服务总线主题/订阅(https://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-topics/)并让呼叫者“订阅”“作业完成通知”主题,但是:

>您显然无法多次订阅同一主题,除非您创建多个“订阅”条目(不会缩放)
>除非我们为每个作业ID创建了“订阅”,并且在该订阅上的Receive()API调用(使用I / O完成端口)上调用了块,否则我们无法获得有关作业的实时通知已经处理完毕.

以前有没有人有过实现这种Job系统的经验(实时,低延迟,有调用者的完成通知)?

谢谢

解决方法

实际上,队列并不支持推送.关于队列的整个想法是接收者不需要实时接收消息,并且想要定期检查消息.如果需要实时通信,可以在接收方创建HTTP / TCP侦听器,让发送方发出HTTP / TCP请求.

因此,一种方法是使用内部端点在Web角色上创建Web服务.您使用队列将服务的地址以及消息发送到辅助角色.作业完成后,worker角色将调用该服务以通知Web角色该作业已完成.

这种方法很好,但它没有提供太多价值.它无法在UI上显示某些内容(除非您实现Web套接字),因为服务器无法通知浏览器.因此,如果您想在浏览器客户端中显示通知,我建议您使用拉解决方案(除非您实现Web套接字).如果您使用的是富客户端,则可以在客户端计算机上托管Web服务,并让worker角色通过调用该服务来通知客户端.

最好的祝福,

徐明.

.net – Windows Azure上的AspPDF和AspJPEG

.net – Windows Azure上的AspPDF和AspJPEG

我最近开始将.NET应用程序迁移到 Windows Azure云服务.我们的应用程序严重依赖于许多COM类组件,其中包括AspPDF(用于PDF生成和操作)和AspJPEG(用于图像重新调整大小).在典型的非云IIS设置中,我只会在我们的生产服务器上注册DLL(使用regsvr32),一切都会好的!

在Azure中,这个过程略有不同,我将回答我自己的问题,以帮助那些面临类似挑战的人.此方法可用于需要在部署过程中在服务器上注册的任何dll.

要在Windows Azure云服务上注册AspPDF和AspJPEG组件,必须将DLL注册过程合并到部署例程中.当Azure解包应用程序时,它必须触发命令来注册DLL,这必须保留在所有VM上,以确保这些依赖项在云环境中一致地工作.

为此,我们可以指示在目标服务器上执行命令文件.此任务在ServiceDeFinition.csdef文件中定义,如下所示:

<Startup>
  <Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>

提升的执行上下文确保必须在服务上线之前执行此过程. Azure Fabric Controller将在BIN文件夹中查找.cmd文件.您可以在记事本中创建.cmd,然后更改扩展名.这是.cmd文件的内容.

chcp 1252>NUL
regsvr32 /s .\library\asppdf64.dll
regsvr32 /s .\library\aspjpeg64.dll
exit /b 0

我们使用参数/ s调用regsvr32工具,这确保响应是静默的,即没有会混淆结构控制器的弹出窗口.这很重要,因为我浪费了大量时间,想知道为什么部署过程暂停在初始化阶段……添加/ s参数解决了这个问题!

在我的情况下,我将DLL放在一个名为library的文件夹中,但您可以将它们放在任何您喜欢的地方,前提是它们在.cmd文件中被正确引用.还要确保为Visual Studio中的启动命令中引用的任何DLL设置以下文件属性:

构建行动:内容

复制到输出目录:始终

注册DLL的这个额外过程为部署过程增加了几乎可以忽略的时间.另一个特定于AspPDF的点是使用正确的DLL版本的重要性. Persits发出32位和64位dll,Azure VM在64位环境中运行,因此在上述过程中注册asppdf64.dll非常重要,注册32位dll会在应用程序中引发模糊错误.幸运的是,您无需为64位版本的AspPDF购买单独的许可证.

我希望这将有助于其他面临类似问题的人将Comp组件(如AspPDF)迁移到Azure.

.net – 在Windows Azure上部署MPI应用程序

.net – 在Windows Azure上部署MPI应用程序

有一个用C(用于 Linux)编写的现有MPI科学应用程序,我想在Windows Azure上运行.那可能吗?

>如果可能,如何部署应用程序?
>是否有必要将其转换为Microsoft MPI?
>我需要为此购买特定类型的Azure服务吗?
>是否有必要编写托管包装器以使其工作?

任何建议/意见/参考将是非常有帮助的.

P.S我是Azure的新手.

因此,您无需执行任何太特殊的操作即可在Azure中运行MPI.请注意,Azure节点(与亚马逊的集群计算实例不同)并未真正为此设置;您不一定拥有高速网络,并且节点不一定在网络上彼此靠近.因此,紧密耦合的代码可能不能很好地工作,而很多人成功地使用亚马逊或其他服务来完成这类工作.

无论如何,HPC Server附带的“Microsoft” MPI只是一个重新品牌,可能稍微调整了MPICH2;所以这是一个标准的MPI,这应该没有问题.任何符合MPI标准的MPI程序都应该没问题.

至于运行单个MPI作业,这并不比在少数(比如)桌面上第一次运行MPI作业更难;您必须确保正确设置了主机文件,并且MPI已设置为与相应的IP块通信.在Technet上,他们有一个running the linpack benchmark on Azure nodes的例子(包括确保你的Azure workers are running HPC server所需的链接).他们跳过几步,因为linpack是一个可以下载的预构建二进制文件,但使用MPI进行编译非常简单.

至于部署应用程序以便您可以定期运行它(或让其他人运行它),我会推荐其他人如何最好地执行此操作.

azure-storage – 在Windows Azure Blob存储中使用子目录

azure-storage – 在Windows Azure Blob存储中使用子目录

我正在尝试将文件上传到 Windows Azure blob存储.根据我的理解,您可以将文件上传到类似于子目录的内容.我想将文件上传到blob,使文件基本上驻留在/TestContainer/subdirectory1/subdirectory2/file.png中

// Setup the Windows Aure blob client
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("BlobStorage");
CloudBlobClient client = storageAccount.CreateCloudBlobClient();

// Retrieve the TestContainer container from blob storage
CloudBlobContainer container = client.GetContainerReference("TestContainer");
if (container.CreateIfNotExist())
  container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccesstype.Blob });

// Setup the blob
CloudBlob blob = container.GetBlobReference("");

// Create the Meta data for the blob
NameValueCollection Metadata = new NameValueCollection();
Metadata["id"] = fileID.ToString();
blob.Metadata.Add(Metadata);

// Store the blob 
byte[] bytes = GetFileBytes();
blob.UploadByteArray(bytes);

如何上传具有目录结构的文件?链接here提到有一种方法可以做到这一点.但是,它没有告诉你如何做到这一点.

谢谢!

解决方法

有几种方法.更简单的方法是使用/ maker作为@ makerofthings7已经提到过.如果您愿意,也可以使用CloudBlobDirectory对象.这是一个显示两者的例子.

CloudBlobContainer testContainer = blobClient.GetContainerReference("testcontainer");

//Upload using a CloudBlobDirectory object
var dir = testContainer.GetDirectoryReference("UsingClouddirectory/foo/bar/baz/");
var blobRef = dir.GetBlockBlobReference("BlobByDir.bin");

using (MemoryStream ms = new MemoryStream(new byte[] { 0x0 }))
{
    blobRef.UploadFromStream(ms);
}

//Upload using the filename without a CloudBlobDirectory
var blobRef2 = testContainer.GetBlockBlobReference("UsingBlobName/foo/bar/baz/BlobByName.bin");
using (MemoryStream ms = new MemoryStream(new byte[] { 0x0 }))
{
    blobRef2.UploadFromStream(ms);
}

azure-storage – 无法初始化Windows Azure存储模拟器

azure-storage – 无法初始化Windows Azure存储模拟器

Azure存储位于本地sql Server上.我运行了DSInit / sqlinstance:完成没有错误,但当我尝试运行我的应用程序时,我仍然无法初始化 Windows Azure存储模拟器.

还有其他一些我错过的设置吗?

谢谢

解决方法

假设您安装了sql Express:

>单击“开始”,指向“所有程序”,然后单击“Windows Azure SDK”
V1.4
>右键单击“Windows Azure SDK命令提示符”,然后单击“运行方式”
管理员
>在Windows Azure SDK命令提示符窗口中,键入以下内容
命令:DSInit / sqlInstance:< sqlServerInstance&gt ;;
http://blog.nimbo.com/error-failed-to-initialize-windows-azure-storage-emulator/

如果没有,请发布错误的完整日志.

今天关于c# – Windows Azure上的作业队列设计的介绍到此结束,谢谢您的阅读,有关.net – Windows Azure上的AspPDF和AspJPEG、.net – 在Windows Azure上部署MPI应用程序、azure-storage – 在Windows Azure Blob存储中使用子目录、azure-storage – 无法初始化Windows Azure存储模拟器等更多相关知识的信息可以在本站进行查询。

本文标签: