Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Azure中的PNP PowerShell函数在时间间隔内快速触发时失败_Powershell_Azure_Sharepoint_Azure Functions - Fatal编程技术网

Azure中的PNP PowerShell函数在时间间隔内快速触发时失败

Azure中的PNP PowerShell函数在时间间隔内快速触发时失败,powershell,azure,sharepoint,azure-functions,Powershell,Azure,Sharepoint,Azure Functions,我的PNP PowerShell Azure功能有问题 Azure功能将由html或logic应用程序触发,并将连接到SharePoint网站 连接打开后,azure功能将在此站点上设置不同的权限。但是如果azure函数从两个站点触发为fast,则第一个站点将失败,并显示以下错误消息 Set PnPListPermission:该对象在与该对象关联的上下文不同的上下文中使用 在run.ps1:第51行 设置PnPListPermission CategoryInfo:WriteError:

我的PNP PowerShell Azure功能有问题

Azure功能将由html或logic应用程序触发,并将连接到SharePoint网站

连接打开后,azure功能将在此站点上设置不同的权限。但是如果azure函数从两个站点触发为fast,则第一个站点将失败,并显示以下错误消息

Set PnPListPermission:该对象在与该对象关联的上下文不同的上下文中使用

在run.ps1:第51行

  • 设置PnPListPermission


    • CategoryInfo:WriteError:(:)[Set-PnPListPermission],InvalidOperationException

    • FullyQualifiedErrorId:异常,SharePointPnP.PowerShell.Commands.List.SetListPermission

如果触发操作之间间隔20秒,azure函数将成功运行

我的第一个想法是,这是因为azure函数的实例化

在本地PC上,PowerShell脚本运行平稳


谢谢,BR

这听起来像是并发问题。也就是说,您正在与一个要求客户端序列化其访问权限的服务(在本例中为SharePoint)交谈,但您有两个同时运行的函数同时访问它。(FWIW,如果您进行了两次尝试更新同一个表实体的调用,则可能会出现完全相同的问题)

  • 检查sharepoint的并发访问选项。例如,您的代码能否捕获异常,等待5秒钟,然后重试?在本例中,您正在进行自己的并发管理
  • 如果您使用的是持久函数(在预览中),那么它有一些单例支持:。即使您的函数是Powershell,您仍然可以包含使用耐久性的C#函数

  • 我找到了一个可行的解决方案:

  • 为azure函数创建一个host.json,计时如下示例所示: { “队列”:{ “maxPollingInterval”:15000, “可见性超时”:“00:00:30”, “批量大小”:1, “maxDequeueCount”:3, “纽巴奇阈值”:2 } }

  • 将网站\u最大\u动态\u应用程序\u缩放\u设置为1

  • 使用CSOM呼叫而不是PNP。有了CSOM,您就有了更高的灵活性
  • 实现一个函数以延迟重试执行,以防止出现SharePoint HTTP错误消息
  • 如果许多邮件在短时间内发送到sharepoint,请在此步骤之间添加额外的延迟

  • host.json-queues配置没有为我解决这个问题。我最终写了一个信号量解决方法:在存储表中查找一条记录,如果它在那里-删除它,如果没有-等待它弹出。然后在完成时(最终)-写回记录