2015-08-08 58 views
0

我试图建立在Visual Studio中我的第一个Web应用程序2013年贮藏SignalR 2个消息的Azure存储

首先,我在Azure上创建一个帐户(现在试用版);

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

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

它工作正常。

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

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

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

但是,我无法找到关于如何将聊天消息存储到Azure存储帐户的任何指导。

我甚至不知道从哪里配置我SignalR中心,我的存储帐户:(

UPDATE之间的连接

我试图用这个代码来创建一个新表:

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:在类,结构或接口成员声明中存在无效的令牌'{'。

+0

这实在是一个意见。您可以将消息存储到任何地方(因为您提到了Azure存储帐户,它指向表或Blob,但您可以使用其他存储数据库)。但这真的取决于你和你的应用程序(并弄清楚你为什么要存储这些消息,以及你想要做什么)。 –

+0

是的,我知道我可以使用各种方法。正如我的文章所述,这里的目标是存储到一个天蓝色的桌子或blob – phpnewbie2015

回答

0

Azure表是一种键值NoSQL数据库服务,因此是聊天消息传递的好选择。为了让您清楚了解Azure Table的工作原理,请删除出现语法错误的格式错误的类,并将以下代码添加到控制台应用程序中,以了解如何插入Azure表并从中读取聊天消息。为了说明的目的,这是一个简单的例子。您需要花时间考虑对于特定应用程序的分区/行键最有意义。有关查询设计的更多详细信息,请参阅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(); 
    }