C# 服务总线&x2B;MVC中的webjob。将字符串作为消息发送
我正在尝试学习如何将服务总线与Webjob结合使用。我正在使用3个项目,一个是作家,网络作业,和读者。我想在路过时通过服务总线发送消息。我正在尝试从Write-project发送消息,将其传递到WebJob,并将文本转换为大写,然后再次通过队列将其传递到阅读器。 我在同一个解决方案中得到了所有这3个项目(使用VisualStudio) 这就是我的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
函数.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吗