Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure工作人员角色刚开始工作_C#_Azure_Azure Worker Roles - Fatal编程技术网

C# Azure工作人员角色刚开始工作

C# Azure工作人员角色刚开始工作,c#,azure,azure-worker-roles,C#,Azure,Azure Worker Roles,我有一个工作者角色,所以当我部署它时,它只工作一次,然后什么也不做,这是我的代码,我如何解决这个问题? 我只更改了这个位置,函数OnStart和OnStop是默认的 public class WorkerRole : RoleEntryPoint { private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); private readonly M

我有一个工作者角色,所以当我部署它时,它只工作一次,然后什么也不做,这是我的代码,我如何解决这个问题? 我只更改了这个位置,函数OnStart和OnStop是默认的

public class WorkerRole : RoleEntryPoint
{
    private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);

    public override void Run()
    {
        Thread.Sleep(10000);
        Trace.TraceInformation("WorkerRole is running");

        while(true)
        {
            try
            {
                this.RunAsync(this.cancellationTokenSource.Token).Wait();
            }
            finally
            {
                this.runCompleteEvent.Set();
            }
        }
    }

    public override bool OnStart()
    {
        ServicePointManager.DefaultConnectionLimit = 12;
        bool result = base.OnStart();
        Trace.TraceInformation("WorkerRole has been started");
        return result;
    }

    public override void OnStop()
    {
        Trace.TraceInformation("WorkerRole is stopping");

        this.cancellationTokenSource.Cancel();
        this.runCompleteEvent.WaitOne();

        base.OnStop();

        Trace.TraceInformation("WorkerRole2 has stopped");
    }

    public byte[] imageToByteArray(System.Drawing.Image imageIn)
    {
        MemoryStream ms = new MemoryStream();
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        return ms.ToArray();
    }


    private CloudBlobContainer GetImageBlobContainer()
    {
        var storageAccount = CloudStorageAccount.Parse("myconnectionstring");
        var blobClient = storageAccount.CreateCloudBlobClient();
        var container = blobClient.GetContainerReference("cadblob");
        container.CreateIfNotExists();

        container.SetPermissions(
            new BlobContainerPermissions
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });
        return container;
    }

    public static Image ScaleImage(Image image, int maxWidth, int maxHeight)
    {
        var ratioX = (double)maxWidth / image.Width;
        var ratioY = (double)maxHeight / image.Height;
        var ratio = Math.Min(ratioX, ratioY);

        var newWidth = (int)(image.Width * ratio);
        var newHeight = (int)(image.Height * ratio);

        var newImage = new Bitmap(newWidth, newHeight);
        Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
        return newImage;
    }

    private async Task RunAsync(CancellationToken cancellationToken)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Myconnectionstring");            
        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();           
        CloudQueue queue = queueClient.GetQueueReference("cadqueue");            
        CloudQueueMessage retrievedMessage = queue.GetMessage();

        if (retrievedMessage.AsString != null || retrievedMessage.AsString != "")
        {
            string[] msg = retrievedMessage.AsString.Split(' ');

            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
            CloudTable table = tableClient.GetTableReference("cadtable");

            TableOperation retrieveOperation = TableOperation.Retrieve<ImageEntity>("Images", msg[0]);
            TableResult retrievedResult = table.Execute(retrieveOperation);
            var container = GetImageBlobContainer();
            msg[2] = "mini_" + msg[2];
            CloudBlockBlob blockBlob = container.GetBlockBlobReference(msg[2]);
            blockBlob.Properties.ContentType = msg[1];

            Image img;
            var webClient = new WebClient();
            byte[] imgBytes = webClient.DownloadData(((ImageEntity)retrievedResult.Result).Full_img);
            using (var ms = new MemoryStream(imgBytes))
            {
                img = Image.FromStream(ms);
            }
            Image thumb = ScaleImage(img, 220, 160);
            var fileBytes = imageToByteArray(thumb);
            await blockBlob.UploadFromByteArrayAsync(fileBytes, 0, fileBytes.Length);

            ImageEntity ent = (ImageEntity)retrievedResult.Result;
            if (ent != null)
            {
                ent.Mini_img = "https://cadwebstorage.blob.core.windows.net/cadblob/" + msg[2];
                TableOperation insertOrReplaceOperation = TableOperation.InsertOrReplace(ent);
                table.Execute(insertOrReplaceOperation);
            }
            else
            {
                Console.WriteLine("Entity could not be retrived.");
            }

            queue.DeleteMessage(retrievedMessage);
        }


        while (!cancellationToken.IsCancellationRequested)
        {
            Trace.TraceInformation("Working");
            await Task.Delay(10000);
        }
    }

}
公共类WorkerRole:RoleEntryPoint
{
私有只读CancellationTokenSource CancellationTokenSource=新的CancellationTokenSource();
私有只读ManualResetEvent runCompleteEvent=新的ManualResetEvent(假);
公共覆盖无效运行()
{
睡眠(10000);
Trace.TraceInformation(“WorkerRole正在运行”);
while(true)
{
尝试
{
this.RunAsync(this.cancellationTokenSource.Token).Wait();
}
最后
{
this.runCompleteEvent.Set();
}
}
}
公共覆盖bool OnStart()
{
ServicePointManager.DefaultConnectionLimit=12;
bool result=base.OnStart();
Trace.TraceInformation(“WorkerRole已启动”);
返回结果;
}
公共覆盖void OnStop()
{
Trace.TraceInformation(“WorkerRole正在停止”);
this.cancellationTokenSource.Cancel();
this.runCompleteEvent.WaitOne();
base.OnStop();
Trace.TraceInformation(“工作错误2已停止”);
}
公共字节[]imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms=新的MemoryStream();
保存(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
返回ToArray女士();
}
私有CloudBlobContainer GetImageBlobContainer()
{
var storageAccount=CloudStorageAccount.Parse(“myconnectionstring”);
var blobClient=storageAccount.CreateCloudBlobClient();
var container=blobClient.GetContainerReference(“cadblob”);
container.CreateIfNotExists();
container.SetPermissions(
新BlobContainerPermissions
{
PublicAccess=BlobContainerPublicAccessType.Blob
});
返回容器;
}
公共静态图像缩放图像(图像图像,int-maxWidth,int-maxHeight)
{
var ratioX=(双精度)maxWidth/image.Width;
变量比率=(双)最大高度/图像高度;
var比率=数学最小值(ratioX,ratioY);
var newWidth=(int)(image.Width*比率);
var newHeight=(int)(image.Height*比率);
var newImage=新位图(新宽度、新高度);
Graphics.FromImage(newImage).DrawImage(image,0,0,newWidth,newHeight);
返回新图像;
}
专用异步任务RunAsync(CancellationToken CancellationToken)
{
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(“Myconnectionstring”);
CloudQueueClient=storageAccount.CreateCloudQueueClient();
CloudQueue queue=queueClient.GetQueueReference(“cadqueue”);
CloudQueueMessage retrievedMessage=queue.GetMessage();
if(retrievedMessage.AsString!=null | | retrievedMessage.AsString!=“”)
{
string[]msg=retrievedMessage.AsString.Split(“”);
CloudTableClient tableClient=storageAccount.CreateCloudTableClient();
CloudTable=tableClient.GetTableReference(“cadtable”);
TableOperation retrieveOperation=TableOperation.Retrieve(“图像”,消息[0]);
TableResult retrievedResult=table.Execute(retrieveOperation);
var container=GetImageBlobContainer();
味精[2]=“迷你们”+味精[2];
CloudBlockBlob blockBlob=container.getblockblobbreference(msg[2]);
blockBlob.Properties.ContentType=msg[1];
图像img;
var webClient=新的webClient();
字节[]imgBytes=webClient.DownloadData(((ImageEntity)retrievedResult.Result).Full\u img);
使用(var ms=新内存流(单位为千兆字节))
{
img=Image.FromStream(ms);
}
图像拇指=缩放图像(img,220,160);
var fileBytes=imageToByteArray(thumb);
等待blockBlob.UploadFromByteArrayAsync(fileBytes,0,fileBytes.Length);
ImageEntity ent=(ImageEntity)retrievedResult.Result;
如果(ent!=null)
{
ent.Mini_img=”https://cadwebstorage.blob.core.windows.net/cadblob/“+味精[2];
TableOperation insertOrReplaceOperation=TableOperation.InsertOrReplace(ent);
表.Execute(insertoreplaceoperation);
}
其他的
{
Console.WriteLine(“无法检索实体”);
}
queue.DeleteMessage(retrievedMessage);
}
而(!cancellationToken.IsCancellationRequested)
{
跟踪。跟踪信息(“工作”);
等待任务。延迟(10000);
}
}
}

由于此循环,图像缩放代码只能工作一次

 while (!cancellationToken.IsCancellationRequested)
        {
            Trace.TraceInformation("Working");
            await Task.Delay(10000);
        }
内部
专用异步任务RunAsync(CancellationToken CancellationToken)
。除非停止工作实例,否则此操作永远不会终止。 要修复它,可以像这样将图像处理代码放入循环中

private async Task RunAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                ScaleImage();
                await Task.Delay(10000);
            }
        }

        private void ScaleImage()
        {
            Trace.TraceInformation("Scaling Image");
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Myconnectionstring");
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
            CloudQueue queue = queueClient.GetQueueReference("cadqueue");
            CloudQueueMessage retrievedMessage = queue.GetMessage();

            if (retrievedMessage.AsString != null || retrievedMessage.AsString != "")
            {
                string[] msg = retrievedMessage.AsString.Split(' ');

                CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
                CloudTable table = tableClient.GetTableReference("cadtable");

                TableOperation retrieveOperation = TableOperation.Retrieve<ImageEntity>("Images", msg[0]);
                TableResult retrievedResult = table.Execute(retrieveOperation);
                var container = GetImageBlobContainer();
                msg[2] = "mini_" + msg[2];
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(msg[2]);
                blockBlob.Properties.ContentType = msg[1];

                Image img;
                var webClient = new WebClient();
                byte[] imgBytes = webClient.DownloadData(((ImageEntity)retrievedResult.Result).Full_img);
                using (var ms = new MemoryStream(imgBytes))
                {
                    img = Image.FromStream(ms);
                }
                Image thumb = ScaleImage(img, 220, 160);
                var fileBytes = imageToByteArray(thumb);
                await blockBlob.UploadFromByteArrayAsync(fileBytes, 0, fileBytes.Length);

                ImageEntity ent = (ImageEntity)retrievedResult.Result;
                if (ent != null)
                {
                    ent.Mini_img = "https://cadwebstorage.blob.core.windows.net/cadblob/" + msg[2];
                    TableOperation insertOrReplaceOperation = TableOperation.InsertOrReplace(ent);
                    table.Execute(insertOrReplaceOperation);
                }
                else
                {
                    Console.WriteLine("Entity could not be retrived.");
                }

                queue.DeleteMessage(retrievedMessage);
            }

        }

由于此循环,图像缩放代码只能工作一次

 while (!cancellationToken.IsCancellationRequested)
        {
            Trace.TraceInformation("Working");
            await Task.Delay(10000);
        }
内部
专用异步任务RunAsync(CancellationToken CancellationToken)
。除非停止工作实例,否则此操作永远不会终止。 要修复它,可以像这样将图像处理代码放入循环中

private async Task RunAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                ScaleImage();
                await Task.Delay(10000);
            }
        }

        private void ScaleImage()
        {
            Trace.TraceInformation("Scaling Image");
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("Myconnectionstring");
            CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
            CloudQueue queue = queueClient.GetQueueReference("cadqueue");
            CloudQueueMessage retrievedMessage = queue.GetMessage();

            if (retrievedMessage.AsString != null || retrievedMessage.AsString != "")
            {
                string[] msg = retrievedMessage.AsString.Split(' ');

                CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
                CloudTable table = tableClient.GetTableReference("cadtable");

                TableOperation retrieveOperation = TableOperation.Retrieve<ImageEntity>("Images", msg[0]);
                TableResult retrievedResult = table.Execute(retrieveOperation);
                var container = GetImageBlobContainer();
                msg[2] = "mini_" + msg[2];
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(msg[2]);
                blockBlob.Properties.ContentType = msg[1];

                Image img;
                var webClient = new WebClient();
                byte[] imgBytes = webClient.DownloadData(((ImageEntity)retrievedResult.Result).Full_img);
                using (var ms = new MemoryStream(imgBytes))
                {
                    img = Image.FromStream(ms);
                }
                Image thumb = ScaleImage(img, 220, 160);
                var fileBytes = imageToByteArray(thumb);
                await blockBlob.UploadFromByteArrayAsync(fileBytes, 0, fileBytes.Length);

                ImageEntity ent = (ImageEntity)retrievedResult.Result;
                if (ent != null)
                {
                    ent.Mini_img = "https://cadwebstorage.blob.core.windows.net/cadblob/" + msg[2];
                    TableOperation insertOrReplaceOperation = TableOperation.InsertOrReplace(ent);
                    table.Execute(insertOrReplaceOperation);
                }
                else
                {
                    Console.WriteLine("Entity could not be retrived.");
                }

                queue.DeleteMessage(retrievedMessage);
            }

        }

你能把全班都贴在这里吗?是的,当然,我会把我的帖子编辑清楚。你能把全班都贴在这里吗?是的,当然,我会把我的帖子编辑清楚。