如何使用webjobs在文档数据库中推送数据?

时间:2018-01-12 10:46:38

标签: azure azure-storage azure-webjobs

我编写了以下代码来从文本文件中读取数据,然后将句子分开并将它们发送到azure事件中心。

我能够将数据发送到事件中心,但无法在文档db中推送数据。

如何使用webjobs在文档数据库中推送数据?我从控制台应用程序运行webjobs,我是否需要添加更多配置才能在本地运行?  Program.cs的

a

function.cs

   static void Main(string[] args)
        {
            JobHostConfiguration config = new JobHostConfiguration();
            config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Error;

            var eventHubConfig = new EventHubConfiguration();
            eventHubConfig.AddReceiver(eventHubName, connectionString);
            config.UseEventHub(eventHubConfig);

            JobHost host = new JobHost(config);
            config.DashboardConnectionString = StorageConnectionString;
            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();
            }

            //Send test messages
            Task.Run(() =>
            {
                SendMessagesToEventHub();
            });

            host.RunAndBlock();
        }

1 个答案:

答案 0 :(得分:1)

你可以从github Azure WebJobs SDK Extensions得到答案。如果我们要将文档插入Azure documentdb,我们需要将对象插入其中。在您的情况下,您的输出是字符串。

  

我是否需要添加更多配置才能在本地运行?

我也为此做了演示。以下是详细步骤

1.创建.net框架Webjob项目。

2.在App.config文件中添加AzureWebJobsDocumentDBConnectionString。

<appSettings>
    <!-- Service Bus specific app setings for messaging connections -->
    <add key="Microsoft.ServiceBus.ConnectionString" value="Endpoint=sb://[your namespace].servicebus.windows.net;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[your secret]" />
    <add key ="AzureWebJobsDocumentDBConnectionString" value="xxxxx"/>
 </appSettings>

enter image description here

3.在Program.cs文件中添加以下代码。

using System;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DocumentDB;
using Microsoft.Azure.WebJobs.ServiceBus;
using Microsoft.ServiceBus.Messaging;

namespace WebJobTest
{
    // To learn more about Microsoft Azure WebJobs SDK, please see https://go.microsoft.com/fwlink/?LinkID=320976
    class Program
    {
        // Please set the following connection strings in app.config for this WebJob to run:
        // AzureWebJobsDashboard and AzureWebJobsStorage
        private static string eventHubName = "eventhubNam";
        private static string connectionString = "eventhub connectionstring";
        static void Main()
        {
            JobHostConfiguration config = new JobHostConfiguration();
            config.Tracing.ConsoleLevel = System.Diagnostics.TraceLevel.Error;

            var eventHubConfig = new EventHubConfiguration();
            eventHubConfig.AddReceiver(eventHubName, connectionString);
            config.UseDocumentDB(new DocumentDBConfiguration
            {
                ConnectionString = "DocumentDB ConnectionString"
            });
            config.UseEventHub(eventHubConfig);
            config.DashboardConnectionString = "storage connection string";
            JobHost host = new JobHost(config);

            if (config.IsDevelopment)
            {
                config.UseDevelopmentSettings();
            }

            //Send test messages
            Task.Run(() =>
            {
                SendMessagesToEventHub();
            });

            host.RunAndBlock();
        }
        static void SendMessagesToEventHub()
        {
            var eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, eventHubName);
              try
                {
                    var message = Guid.NewGuid().ToString();
                    Console.WriteLine("{0} > Sending message: {1}", DateTime.Now, message);
                    eventHubClient.Send(new EventData(Encoding.UTF8.GetBytes(message)));
                }
                catch (Exception exception)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("{0} > Exception: {1}", DateTime.Now, exception.Message);
                    Console.ResetColor();
                }

                Thread.Sleep(200);

        }
    }
}

4.在function.cs

 public static void Run([EventHubTrigger("eventhub name")] EventData message, [DocumentDB("document Database name", "collection", ConnectionStringSetting = "AzureWebJobsDocumentDBConnectionString")]out Item document)
    {
        string data = Encoding.UTF8.GetString(message.GetBytes());

        document = new Item{Text = data};
        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine($"Message received. Data: '{data}'");
        Console.ResetColor();
    }

    public class Item
    {
        public string Text;

    }

5.从控制台检查结果。

enter image description here

  1. 从控制台完成调试,然后从Azure documentdb检查
  2. enter image description here