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

How to push data in document db using webjobs?

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

我可以将数据发送到事件中心,但无法将数据推送到文档数据库中。

如何使用webjobs推送文档数据库中的数据?我正在从控制台应用程序 运行ning webjobs,我需要在本地向 运行 添加更多配置吗? Program.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();
        }

function.cs

class Functions
    {
        public static void Run([EventHubTrigger("azurepochub")] EventData message, [Microsoft.Azure.WebJobs.DocumentDB("testcosmosdb01122018", "Items", ConnectionStringSetting = "dbConnctionString")]out dynamic document)
        {
            string data = Encoding.UTF8.GetString(message.GetBytes());

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

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

Do I need add more configuration to run it locally?

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

1.Create .net 框架 Webjob 项目。

2.Add 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>

3.Add 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.In 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.Check 来自控制台的结果。

  1. 从控制台完成 调试然后从 Azure documentdb
  2. 检查