【问题标题】:Storing SignalR 2 messages to an Azure Storage将 SignalR 2 消息存储到 Azure 存储
【发布时间】:2015-11-01 00:40:09
【问题描述】:

我正在尝试在 Visual Studio 2013 上构建我的第一个 Web 应用程序。

首先,我在 Azure 上创建了一个帐户(目前为试用版);

其次,我在 Visual Studio 上创建了一个应用程序。

第三,我在那里成功创建了一个 SignalR Hub (SignalR 2),然后我在其中添加了一个非常简单的聊天应用程序。

效果很好。

第四,我创建了一个 Azure 存储帐户。

我的下一个任务是将每条消息存储到此存储中。

但是,我似乎碰到了一堵砖墙。我是新手,所以我使用所有可用的在线教程来指导我。

但是,我找不到任何关于如何将聊天消息存储到 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 存储帐户,它会将您指向表或 blob,但还有其他存储数据库可供您使用)。但这真的取决于您和您的应用程序(并弄清楚您为什么要存储这些消息,以及您想用它们做什么)。
  • 是的,我知道我可以使用各种方法。正如我的帖子所述,这里的目的是存储到 azure table 或 blob

标签: c# asp.net azure azure-storage signalr-hub


【解决方案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();
  }

【讨论】:

    猜你喜欢
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 2014-02-10
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多