我正在尝试将一些模拟数据推送到azure iot hub,并使用azure函数(C#)将接收到iot hub的数据存储在mongo db中。接收 IoT 集线器消息至 azure 功能正常。当我尝试将它们推送到 mongo db 时,如下所示,出现以下错误。我关注了this执行此操作时的教程。
我的 run.csx
using System;
using System.Runtime.Serialization;
using System.ServiceModel.Description;
using MongoDB.Bson.IO;
using MongoDB.Bson;
using MongoDB;
using MongoDB.Driver;
using System.Security.Authentication;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void Run(string myIoTHubMessage, TraceWriter log)
{
log.Info($"C# IoT Hub trigger function processed a message: {myIoTHubMessage}");
string deviceId="",data="";
var raw_obj=JObject.Parse(myIoTHubMessage);
deviceId=(string)raw_obj["device_id"];
data=(string)raw_obj["Data"];
Cosmos cosmos= new Cosmos(deviceId,data);
cosmos.pushData();
}
//CosmosDB class
public class Cosmos
{
string deviceId="",data="";
public BsonDocument document = new BsonDocument();
public Cosmos(string deviceId, string data)
{
this.deviceId=deviceId;
this.data=data;
}
public void pushData()
{
MainAsync().Wait();
}
public async Task MainAsync()
{
string connectionString =
@"mongodb://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
settings.SslSettings = new SslSettings() { EnabledSslProtocols = SslProtocols.Tls12};
var mongoClient = new MongoClient(settings);
IMongoDatabase db = mongoClient.GetDatabase("iot");
var icollection = db.GetCollection<BsonDocument>(deviceId);
document.Add("Data",data);
await icollection.InsertOneAsync(document);
}
}
我的project.json文件
{
"frameworks": {
"net46":{
"dependencies": {
"Newtonsoft.Json": "10.0.3",
"System.ServiceModel.Primitives":"4.4.0",
"MongoDB.Bson": "2.4.0",
"MongoDB.Driver": "2.4.0",
"MongoDB.Driver.Core": "2.4.0"
}
}
}
}
当我运行代码时,出现以下错误
2018-10-10T18:34:25.990 [Error] Function compilation error
2018-10-10T18:34:26.119 [Error] run.csx(3,27): error CS0234: The type or namespace name 'Description' does not exist in the namespace 'System.ServiceModel' (are you missing an assembly reference?)
2018-10-10T18:34:26.242 [Error] run.csx(4,7): error CS0246: The type or namespace name 'MongoDB' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.332 [Error] run.csx(5,7): error CS0246: The type or namespace name 'MongoDB' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.435 [Error] run.csx(6,7): error CS0246: The type or namespace name 'MongoDB' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.548 [Error] run.csx(7,7): error CS0246: The type or namespace name 'MongoDB' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.666 [Error] run.csx(10,7): error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.771 [Error] run.csx(11,7): error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:26.828 [Warning] run.csx(13,48): warning CS0618: 'TraceWriter' is obsolete: 'Will be removed in an upcoming version. Use ILogger instead.'
2018-10-10T18:34:26.946 [Error] run.csx(28,12): error CS0246: The type or namespace name 'BsonDocument' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:27.058 [Error] run.csx(17,17): error CS0103: The name 'JObject' does not exist in the current context
2018-10-10T18:34:27.201 [Error] run.csx(28,40): error CS0246: The type or namespace name 'BsonDocument' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:27.304 [Error] run.csx(42,5): error CS0246: The type or namespace name 'MongoClientSettings' could not be found (are you missing a using directive or an assembly reference?)
2018-10-10T18:34:27.431 [Error] run.csx(42,36): error CS0103: The name 'MongoClientSettings' does not exist in the current context
2018-10-10T18:34:27.632 [Error] Executed 'Functions.EventHubTriggerCSharp1' (Failed, Id=32bc6c5d-73fa-4082-b74b-c86a901f6656)
有人可以帮我解决这个问题吗?
最佳答案
问题是由于Function运行时的差异引起的。
您遵循的教程在 ~1 运行时创建函数,其中代码针对 .NET Framework ,而您创建的函数则在 ~2 运行时(在 .NET Core env 上运行)上创建。当我们创建一个新的 Function 应用程序时,它的运行时间现在默认设置为 ~2。
解决方案是在门户上的应用程序设置中将 FUNCTIONS_EXTENSION_VERSION
设置为 ~1
。然后点击功能面板上的View Files
并编辑function.json
使其在v1中工作--将eventHubName
更改为path
.请参阅event hub trigger configuration .
还有一些改进,删除了上下文中未使用的内容以及project.json中的System.ServiceModel.Primitives
。 Newtonsoft.Json
程序集存在,但未添加到主机,需要显式引用它。
程序集和命名空间使用
#r "Newtonsoft.Json" using Newtonsoft.Json.Linq; using MongoDB.Bson; using MongoDB.Driver; using System.Security.Authentication;
project.json。
{ "frameworks": { "net46":{ "dependencies": { "MongoDB.Bson": "2.7.0", "MongoDB.Driver": "2.7.0" } } } }
关于c# - 在 Azure Functions 中找不到类型或命名空间名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746736/