C# 服务总线&x2B;MVC中的webjob。将字符串作为消息发送

C# 服务总线&x2B;MVC中的webjob。将字符串作为消息发送,c#,asp.net-mvc,azure,azure-webjobs,azureservicebus,C#,Asp.net Mvc,Azure,Azure Webjobs,Azureservicebus,我正在尝试学习如何将服务总线与Webjob结合使用。我正在使用3个项目,一个是作家,网络作业,和读者。我想在路过时通过服务总线发送消息。我正在尝试从Write-project发送消息,将其传递到WebJob,并将文本转换为大写,然后再次通过队列将其传递到阅读器。 我在同一个解决方案中得到了所有这3个项目(使用VisualStudio) 这就是我的WebJob的函数.cs的样子: namespace WebJob { public class Functions { pu

我正在尝试学习如何将服务总线与Webjob结合使用。我正在使用3个项目,一个是作家网络作业,和读者。我想在路过时通过服务总线发送消息。我正在尝试从Write-project发送消息,将其传递到WebJob,并将文本转换为大写,然后再次通过队列将其传递到阅读器。

我在同一个解决方案中得到了所有这3个项目(使用VisualStudio)

这就是我的WebJob
函数.cs
的样子:

namespace WebJob {
    public class Functions {

        public static void ProcessQueueMessage([ServiceBusTrigger("test")] BrokeredMessage message, TextWriter log)
        {
            var text = message.GetBody<string>().ToUppder();

            Console.WriteLine(text);
            log.WriteLine(text);
        }
    }
}
名称空间WebJob{
公共类功能{
公共静态void ProcessQueueMessage([ServiceBusTrigger(“测试”)]BrokeredMessage消息,TextWriter日志)
{
var text=message.GetBody().toupder();
控制台写入线(文本);
log.WriteLine(文本);
}
}
}
Connectionstring和azure上的其他内容都已解决。但我不知道如何将Writer项目中的
WriterController
文本发送到WebJob(将消息转换为大写)并将其传递到
ReaderController
并在Reader项目中显示

我还没有控制器的代码,因为我不知道如何发送

如何以这种方式将信息从作者发送到读者

我正在使用3个项目,一个是作家、Webjob和读者。我想在路过时通过服务总线发送消息。我试图从Write project发送一条消息,将其传递给WebJob并将文本转换为大写,然后再次通过队列将其传递给阅读器

您似乎希望从“写入”项目创建服务总线队列消息,然后服务总线可能触发的WebJob将消息内容转换为大写并将消息插入Azure存储队列,然后“读取”项目将显示来自Azure存储队列的消息。如果是这样,您可以参考以下步骤和代码来设计项目

在您的WriterController操作方法中,您可以创建服务总线队列消息

var connectionString = "yourconnectionstring";
var queueName = "yourqueuename";

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

string mes = "your queue message";
var message = new BrokeredMessage(mes);

client.Send(message);

//redirect to another page to display message
//Thread.Sleep(2000);

//return Redirect("http://xxxx/{YourReaderControllerName}/ReadMessage");
WebJob函数中,您可以将服务总线队列消息转换为大写,并在处理服务总线队列消息时将其作为Azure存储队列消息插入

public static void CreateQueueMessage([ServiceBusTrigger("servicebusqueuename")] string message, [Queue("azurestoragequeuename")] out string outputQueueMessage, TextWriter log)
{
    var text = message.ToUpper();

    outputQueueMessage = text;

    log.WriteLine(message);

}
public static void CreateQueueMessage([ServiceBusTrigger("myqueue")] string message, [ServiceBus("queue2")] out string outputQueueMessage)
{
    outputQueueMessage = message.ToUpper();

    //Console.WriteLine(message);
}
在您的ReaderController操作方法中,您可以从Azure存储队列获取消息

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                        CloudConfigurationManager.GetSetting("StorageConnectionString"));

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("azurestoragequeuename ");
CloudQueueMessage retrievedMessage = queue.GetMessage();

string qmes = retrievedMessage.AsString;

//Process the message, and then delete the message
//queue.DeleteMessage(retrievedMessage);
编辑:

是否可以通过另一个服务总线队列2从WebJob发送到WriterController?如果是这样,您介意将其从存储队列修改为服务总线队列吗

当WebJob处理服务总线队列消息时,您可以参考此代码段在另一个名为“queue2”的服务总线队列中创建新消息

public static void CreateQueueMessage([ServiceBusTrigger("servicebusqueuename")] string message, [Queue("azurestoragequeuename")] out string outputQueueMessage, TextWriter log)
{
    var text = message.ToUpper();

    outputQueueMessage = text;

    log.WriteLine(message);

}
public static void CreateQueueMessage([ServiceBusTrigger("myqueue")] string message, [ServiceBus("queue2")] out string outputQueueMessage)
{
    outputQueueMessage = message.ToUpper();

    //Console.WriteLine(message);
}
我正在使用3个项目,一个是作家、Webjob和读者。我想在路过时通过服务总线发送消息。我试图从Write project发送一条消息,将其传递给WebJob并将文本转换为大写,然后再次通过队列将其传递给阅读器

您似乎希望从“写入”项目创建服务总线队列消息,然后服务总线可能触发的WebJob将消息内容转换为大写并将消息插入Azure存储队列,然后“读取”项目将显示来自Azure存储队列的消息。如果是这样,您可以参考以下步骤和代码来设计项目

在您的WriterController操作方法中,您可以创建服务总线队列消息

var connectionString = "yourconnectionstring";
var queueName = "yourqueuename";

var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

string mes = "your queue message";
var message = new BrokeredMessage(mes);

client.Send(message);

//redirect to another page to display message
//Thread.Sleep(2000);

//return Redirect("http://xxxx/{YourReaderControllerName}/ReadMessage");
WebJob函数中,您可以将服务总线队列消息转换为大写,并在处理服务总线队列消息时将其作为Azure存储队列消息插入

public static void CreateQueueMessage([ServiceBusTrigger("servicebusqueuename")] string message, [Queue("azurestoragequeuename")] out string outputQueueMessage, TextWriter log)
{
    var text = message.ToUpper();

    outputQueueMessage = text;

    log.WriteLine(message);

}
public static void CreateQueueMessage([ServiceBusTrigger("myqueue")] string message, [ServiceBus("queue2")] out string outputQueueMessage)
{
    outputQueueMessage = message.ToUpper();

    //Console.WriteLine(message);
}
在您的ReaderController操作方法中,您可以从Azure存储队列获取消息

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
                        CloudConfigurationManager.GetSetting("StorageConnectionString"));

CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("azurestoragequeuename ");
CloudQueueMessage retrievedMessage = queue.GetMessage();

string qmes = retrievedMessage.AsString;

//Process the message, and then delete the message
//queue.DeleteMessage(retrievedMessage);
编辑:

是否可以通过另一个服务总线队列2从WebJob发送到WriterController?如果是这样,您介意将其从存储队列修改为服务总线队列吗

当WebJob处理服务总线队列消息时,您可以参考此代码段在另一个名为“queue2”的服务总线队列中创建新消息

public static void CreateQueueMessage([ServiceBusTrigger("servicebusqueuename")] string message, [Queue("azurestoragequeuename")] out string outputQueueMessage, TextWriter log)
{
    var text = message.ToUpper();

    outputQueueMessage = text;

    log.WriteLine(message);

}
public static void CreateQueueMessage([ServiceBusTrigger("myqueue")] string message, [ServiceBus("queue2")] out string outputQueueMessage)
{
    outputQueueMessage = message.ToUpper();

    //Console.WriteLine(message);
}

因此,编写器使用队列向webjob发送消息,然后webjob接收消息,转换消息并将新消息发送到另一个队列,然后读取器读取webjob发送的消息。您是否了解了如何向队列发送消息?这是非常严格的forward@Thomas我能够从控制台应用程序发送到队列,并通过以下操作从另一个控制台应用程序(但不包括webjob)读取。但我无法通过MVC控制器使其工作。我几乎找不到任何MVC示例。因此,编写器使用队列向webjob发送消息,然后webjob接收消息,转换消息并将新消息发送到另一个队列,然后读取器读取webjob发送的消息。您看过如何向队列发送消息吗?这是非常严格的forward@Thomas我能够从控制台应用程序发送到队列,并通过以下操作从另一个控制台应用程序(但不包括webjob)读取。但我无法通过MVC控制器使其工作。我几乎找不到任何MVC示例。回答很好,我懒得写所有这些代码:-)谢谢,我能够发送消息,但我无法在
WriterController
中接收消息,因为我得到了null错误“
值不能为null。参数名称:connectionString”位于
ReaderController``中的connectionString处。我有。但是,我还不能确定存储队列。是否可以改为通过另一个服务总线
queue2
WebJob
发送到
WriterController
?如果是这样,您介意将其从存储队列修改为S吗