Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在基本项目和Azure函数之间移动数据Cosmos DB Trigger项目(都在同一个Xamarin.Forms解决方案中)_C#_Xamarin.forms_Azure Cosmosdb - Fatal编程技术网

C# 在基本项目和Azure函数之间移动数据Cosmos DB Trigger项目(都在同一个Xamarin.Forms解决方案中)

C# 在基本项目和Azure函数之间移动数据Cosmos DB Trigger项目(都在同一个Xamarin.Forms解决方案中),c#,xamarin.forms,azure-cosmosdb,C#,Xamarin.forms,Azure Cosmosdb,我已经在Xamarin.Forms解决方案的框架内建立了一个Azure Functions Cosmos DB Trigger项目,该解决方案包含多个其他项目。如果触发器项目功能齐全,并且能够识别对我的Cosmos DB数据库所做的更改,则会触发该项目。我的计划是使用trigger项目,更具体地说,使用trigger函数,通知我的基础项目数据库中已进行了更改,并使用基础项目中的函数ping数据库、收集更改和更新接口。问题是,我似乎无法将触发器函数中发生的事情与基础项目联系起来 我曾尝试直接在tr

我已经在Xamarin.Forms解决方案的框架内建立了一个Azure Functions Cosmos DB Trigger项目,该解决方案包含多个其他项目。如果触发器项目功能齐全,并且能够识别对我的Cosmos DB数据库所做的更改,则会触发该项目。我的计划是使用trigger项目,更具体地说,使用trigger函数,通知我的基础项目数据库中已进行了更改,并使用基础项目中的函数ping数据库、收集更改和更新接口。问题是,我似乎无法将触发器函数中发生的事情与基础项目联系起来

我曾尝试直接在trigger函数中输入MessagingCenter通知,并将其绑定到基础项目中的订阅,但没有成功。我还尝试在触发器项目中创建一个静态变量,并将其与基础项目中的静态属性更改事件处理程序配对,但也失败了。我在基础项目中引用了触发器项目,反之亦然,因为对于特定的方向流,可能存在某种干扰。MessagingCenter和事件侦听器选项都在项目线内、测试类之间进行了测试,并且工作得很好,所以我相信我没有把设置搞砸

关于为什么会发生这种情况,以及我如何解决它,有什么想法吗

[编辑:
我想我已经将问题缩小到运行并发但独立实例的项目。我在基础项目中放置了一个静态变量,并通过将其分配给触发器函数中的一个值将其暴露给从属触发器项目。当我运行程序时,我将基础项目中的静态变量初始化为0,然后递增它是通过基本项目中的一个函数实现的(此时,触发器函数根本没有被使用,基本项目中的静态变量已增加到1)。然后,我通过在数据库中进行更改来启用触发器函数,当断点在它将要分配静态变量的位置停止触发器函数时,分配的值为0,即使它在基本项目中已递增为1。然后,我在基本项目中调用了相同的递增函数,变量从1跳转在基本项目中设置为2,而在触发器项目中再次设置为0。出于某种原因,基本项目和触发器项目在两个不同的静态变量中进行监视,尽管引用了相同的静态变量。]

根据注释,最好的方法是接收触发器上的更改,因为它们已经包含了所有文档信息,所以可以通过某种信号通知同一项目中的其他组件


信令机制可以利用来维护单个对象,该对象可以充当发布/订阅,触发器只将文档发布到,其他组件可以订阅

“我的计划是使用触发器项目,更具体地说,触发器功能,通知我的基础项目数据库中已进行了更改,并使用基础项目中的功能ping数据库、收集更改并更新接口”-触发器已收到更改(完整文档),为什么不直接将这些更改发送到另一个组件,而不是通知另一个组件并强制其再次读取更改?除了Matias的建议外,如果您在彼此中引用触发器和基础项目,则会有一个无限引用循环,不要这样做。并确保触发器在db在您的基础项目中被引用时会发生更改。此外,如果您能提供更多关于您在项目中使用MessagingCenter/事件处理程序的位置/方式的详细信息,那么查找问题将非常有帮助。感谢您的评论@MatiasQuaranta,很抱歉我的回复太晚。您是对的,这肯定更有意义,但我的挑战是uld仍然可以将位于我的触发器项目中的触发器响应公开给我的基础项目。@Nicole Lu-MSFT,我确信我的触发器会触发,直接对数据库所做的任何更改都会命中触发器函数中的断点。我确信我的消息也可以,我已经成功地反复测试了项目内格式。@SandroMijatovic H这些项目是如何存在的?如果它们在同一个项目中运行,您只需注册一个充当缓冲区或发布/订阅介质的DI依赖项,触发器就可以将数据推送到这个DI对象中,您的其他项目就可以订阅更改。如果它们在不同的实例中生存/执行,您需要通过类似Que的方式将它们链接起来ue,您可以将文档推入队列并在另一个项目上使用QueueTrigger吗?