将signalr2消息存储到Azure存储
本文关键字:Azure 存储 消息存储 signalr2 | 更新日期: 2023-09-27 18:06:56
我正在尝试在Visual Studio 2013上构建我的第一个Web应用程序。
首先,我在Azure上创建了一个帐户(目前是试用版);
其次,我在Visual Studio上创建了一个应用程序。
第三,我成功地创建了一个SignalR Hub (SignalR 2),然后我添加了一个非常简单的聊天应用程序。
工作正常
第四,我创建了一个Azure Storage帐户。
我的下一个任务是将每条消息存储到这个存储中。
但是,我似乎遇到了一堵砖墙。我是新手,所以我使用所有可用的在线教程来指导我。
但是,我找不到任何关于如何将聊天消息存储到Azure存储帐户的指导。
我甚至不知道在哪里配置我的SignalR Hub和我的存储帐户之间的连接:(
我试着用下面的代码创建一个新表:
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyGames
{
public class storageclass
{
string accountName = "mygames";
string accountKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
try
{
StorageCredentials creds = new StorageCredentials(accountName,
accountKey);
CloudStorageAccount account = new CloudStorageAccount(creds, useHttps:
false);
CloudTableClient client = account.CreateCloudTableClient();
CloudTable table = client.GetTableReference("chatmessages");
table.CreateIfNotExists();
Console.WriteLine(table.Uri.ToString());
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.WriteLine("Done... press a key to end.");
Console.ReadKey();
}
}
但是,它包含相当多的错误。但是,最主要的是:
错误1:类、结构或接口成员声明中的令牌"{"无效
Azure Table是一个键值NoSQL数据库服务,因此是聊天消息的一个很好的选择。为了让您清楚地了解Azure Table是如何工作的,请删除导致语法错误的格式不正确的类,并将以下代码添加到控制台应用程序中,以了解如何从Azure Table插入和读取聊天消息。这是一个用于说明目的的简单示例。您需要花时间考虑对您的特定应用程序来说,什么是分区/行键最有意义的。有关查询设计的更多详细信息,请参阅https://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/。另外,对于生产代码,将连接字符串存储在配置文件https://www.connectionstrings.com/store-connection-string-in-webconfig/
中 public class ChatMessage : TableEntity
{
public ChatMessage() { }
public ChatMessage(string user, string time, string message)
{
PartitionKey = user;
RowKey = time;
Message = message;
}
public string SessionID { get; set; }
public string Message { get; set; }
}
static void Main(string[] args)
{
string storageConnection = "DefaultEndpointsProtocol=https;AccountName=mygames;AccountKey=ADD_YOUR_KEY_HERE";
// Select table
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnection);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("chatmessages");
table.CreateIfNotExists();
// Add a chat messages
ChatMessage msg1 = new ChatMessage("mdyson", "150816_17:01:00", "What's up?");
table.Execute(TableOperation.InsertOrReplace(msg1));
ChatMessage msg2 = new ChatMessage("timarshal", "150816_17:02:00", "Not much.");
table.Execute(TableOperation.InsertOrReplace(msg2));
ChatMessage msg3 = new ChatMessage("mdyson", "150816_17:02:30", "Cool.");
table.Execute(TableOperation.InsertOrReplace(msg3));
// Query the messages created between 17:00 and 18:00
string pkFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "mdyson");
string rowKeyLower = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThanOrEqual, "150816_17");
string rowKeyUpper = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.LessThanOrEqual, "150816_18");
string rkFilter = TableQuery.CombineFilters(rowKeyLower, TableOperators.And, rowKeyUpper);
string combinedFilter = TableQuery.CombineFilters(pkFilter, TableOperators.And, rkFilter);
TableQuery<ChatMessage> query = new TableQuery<ChatMessage>().Where(combinedFilter);
var list = table.ExecuteQuery(query).ToList();
foreach (ChatMessage entity in list)
{
Console.WriteLine("[" + entity.RowKey + "] " + entity.PartitionKey + ": " + entity.Message);
// [150816_17:01:00] mdyson: "What's up?"
// [150816_17:02:30] mdyson: "Cool"
}
Console.ReadKey();
}