问题标签 [orleans]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在尝试发布云服务时,我得到:“错误:收到的 JWT 令牌发生安全令牌验证错误......”
我正在尝试发布 Azure 云服务。开始发布大约 1 小时后,它返回此错误。我正在通过 Visual Studio 2013 Ultimate 发布。
我正在尝试创建一个基于奥尔良的测试服务(不是样本之一)。我已经完成了一步一步的云部署教程,找不到任何我可能遗漏的内容。我敢打赌这里有一些东西,比如在某处设置了一些错误的连接字符串。我将再次检查它以确保一切都与教程中的一样(除非那里有错误)。
另外,我使用移动服务作为 API 前端。设置它可能也会导致问题,因为它与我查看的示例不同。
actor - Actor 模型框架和复杂事件处理 (CEP) 有什么区别?
Actor 模型框架(例如Orleans)和复杂事件处理(CEP)(例如Apache Storm )有什么区别?
这些方法中的每一种都适用(或者一种比另一种更适用)的使用示例肯定会有所帮助。
nservicebus - 奥尔良谷物类似于 NServiceBus Sagas?
我刚刚观看了有关如何使用 Orleans 构建 Halo 4 的分布式云服务的视频
c# - 找不到grain接口的实现类的类型代码
在 microsoft orleans (v0.9 Preview April 2014)中,您在创建引用 orleans grains 的 azure web-api 时可能会收到此错误:
找不到grain接口的实现类的类型代码:729000394
。确保grain组件已正确部署并加载到silo中。
以下是一些可能会产生此错误的示例 api 代码:
这是一些谷物代码:
c# - 相对于调度程序将 async-await C# 代码转换为 F#
我想知道这是否是一个太宽泛的问题,但最近我让自己遇到了一段代码,我想确定如何从 C# 转换为正确的 F#。旅程从这里开始 (1)(TPL-F# 交互的原始问题),并从这里继续 (2)(我正在考虑将一些示例代码翻译成 F#)。
示例代码太长,无法在此处重现,但有趣的函数是ActivateAsync
、RefreshHubs
和AddHub
。特别有趣的地方是
AddHub
有一个签名private async Task AddHub(string address)
。RefreshHubs
在循环中调用AddHub
并收集 的列表tasks
,然后它在最后等待它await Task.WhenAll(tasks)
,因此返回值与它的签名匹配private async Task RefreshHubs(object _)
。RefreshHubs
由ActivateAsync
as调用await RefreshHubs(null)
,然后最后有一个await base.ActivateAsync()
与函数签名匹配的调用public override async Task ActivateAsync()
。
问题:
将此类函数签名正确转换为仍保持接口和功能并尊重默认自定义调度程序的 F# 的正确转换是什么?而且我也不太确定这个“F#中的异步/等待”。至于如何“机械地”做到这一点。:)
原因是在链接“here (1)”中似乎存在问题(我尚未验证这一点),因为 F# 异步操作不尊重 (Orleans) 运行时设置的自定义协作调度程序。此外,这里声明 TPL 操作会从调度程序中逃脱并进入任务池,因此禁止使用它们。
我能想到的一种方法是使用 F# 函数,如下所示
该功能startAsPlainTask
由Sacha Barber提供。另一个有趣的选择可能在这里
<编辑:我刚刚注意到Task.WhenAll
也需要等待。但是正确的方法是什么?呃,该睡觉了(一个糟糕的双关语)......
<编辑 2:在Codeplex 的此处 (1)(TPL-F# 交互的原始问题)提到 F# 使用同步上下文将工作推送到线程,而 TPL 没有。现在,这是一个合理的解释,我觉得(尽管无论自定义调度程序如何,我在正确翻译这些片段方面仍然存在问题)。一些有趣的附加信息可能来自
- 如何获取使用 SynchronizationContext 的任务?以及 SynchronizationContext 是如何使用的?
- Await、SynchronizationContext 和控制台应用程序,其中提供了一个示例
SingleThreadSynchronizationContext
,看起来像是对要执行的工作进行排队。也许应该使用这个?
我想我需要在这种情况下提到Hopac,作为一个有趣的切线,并且还提到我在接下来的 50 多个小时左右是遥不可及的,以防我所有的交叉发布都失控了。
<edit 3 : Daniel和svick在评论中给出了使用自定义任务生成器的好建议。Daniel 提供了指向已在FSharpx中定义的链接。
查看源代码,我看到带有参数的接口定义为
如果要在奥尔良使用它,看起来TaskScheduler
应该按照这里TaskScheduler.Current
的文档
Orleans 有它自己的任务调度器,它提供了在 grain 中使用的单线程执行模型。运行任务时使用 Orleans 调度程序而不是 .NET 线程池,这一点很重要。
如果你的grain代码需要创建一个子任务,你应该使用Task.Factory.StartNew:
await Task.Factory.StartNew(() =>{ /* 逻辑 */ });
该技术将使用当前任务调度程序,即 Orleans 调度程序。
您应该避免使用 Task.Run,它始终使用 .NET 线程池,因此不会在单线程执行模型中运行。
看起来TaskScheduler.Current和TaskScheduler.Default之间存在细微差别。也许这需要一个问题,即在哪些示例情况下会有不希望的差异。正如奥尔良文档指出的那样,不要使用Task.Run
,而是指导Task.Factory.StartNew
,我想知道是否应该按照权威机构的建议定义TaskCreationOptions.DenyAttachChild,如Task.Run 与 Task.Factory.StartNew的Stephen Toub和StartNew 的Stephen Cleary是危险的. 嗯,除非我弄错了,否则看起来会是这样。.Default
.DenyAttachChilld
此外,由于自定义调度程序存在问题,我想知道是否可以通过使用任务调度程序(Task.Factory)中解释的自定义Task.Run
TaskFactory并控制线程数和如何:创建一个限制并发的任务计划程序。Task.Factory.CreateNew
嗯,这已经是一个相当长的“思考”了。我想知道我应该如何关闭它?也许如果svick和Daniel可以将他们的评论作为答案,我会同时支持并接受svick 的?
azure - 如何在构建时在 VSO 托管构建控制器上设置环境变量?
如何在构建时在 VSO 托管构建控制器上设置环境变量?一个理想的解决方案是使用 MSBuild 参数。
场景(不必知道):我正在尝试使用 VSO 托管构建控制器构建和部署基于奥尔良的 Azure 托管云服务。目前我正在使用 TFS 托管我自己的构建控制器,但是我们想使用 VSO 托管的构建控制器。为了使其工作,我必须在构建时将 Orleans 环境变量设置为我在 VSO 托管构建控制器上的项目中的路径。我们正在使用持续部署模型。
f# - 如何将 FSharpx TaskBuilder 与带参数的函数一起使用
我最近一直在使用FSharpx 库,尤其是它的TaskBuilder进行编程。现在我想知道是否应该可以定义一个接受参数并接受结果的函数。如
查看源代码,我看到run需要一个不带参数并返回Task<'a>
. FSharpx TaskTests上似乎也没有示例。
如果有人能建议我应该如何使用 FSharpx 获得这样的场景,或者由于我目前还没有完全理解的原因不应该使用这样的库,我将不胜感激。
<编辑:我相信我可以将 doTask 包装如下
它可能会起作用。我目前没有使用编译器,所以这有点麻烦。有没有人对任何方向有意见,或者我只是回答了我自己的问题?:)
<edit2:
我想我需要根据MisterMetaphor 的回答再编辑一次。我认为,尤其是他的P.S.
消息灵通。我使用 FSharpx TaskBuilder 与 C# 进行互操作,其中,如前所述,任务返回为hot(有一些小例外),已经在运行。这与我最近的问题将 async-await C# 代码翻译成 F# 与调度程序和奥尔良有关(我将添加一些标签来加强上下文,也许其他人也在考虑这些)。
当用 C# 术语思考时,我试图实现的是在返回之前等待任务结果,但不会阻塞。我所追求的行为尤其是await
not .Result
。例如,可以从
试图用 C# 来思考哪个上下文、调度程序或行为或正在发生的事情对我来说有点模糊。不幸的是,在互操作方面,我似乎无法忽略所有细节。:)
orleans - 为什么奥尔良不显示“Hello World”?
我正在按照Microsoft Orleans Tutotials执行“Hello World”,我能够编译所有内容,但是当我运行时,我得到了
System.Threading.Tasks.Task`1[System.String]
而不是显示“Hello World!”。我在 Grain 的 return 语句中设置了一个断点,并在打印实际发生后调用它。似乎执行甚至在调用真正的谷物之前就发生了。我认为调用返回是一个承诺,应该像闭包一样执行。我错过了什么吗?
c# - 为什么奥尔良筒仓在更改打招呼示例以支持主机和谷物后开始失败?
我在此示例中遵循orleans 示例,而不是在同一应用程序域中同时运行筒仓和客户端,它们正在遍历,以便两者都可以独立启动。我按照建议进行了更改。我修改了 IGrain1.cs 以接受字符串作为参数
修改grain1.cs实现代码如下
当我运行筒仓时,它总是无法启动筒仓并出现此错误
“TypeLoadException:来自程序集'GrainCollection1 ...'的'GrainCollection1.Grain1'类型中的方法'SayHello'
界面和颗粒定义都匹配。我在这里缺少一些简单的东西吗?
c# - 在订阅中调用 Task.Factory.StartNew(async () => {}) 通常是不是很可疑?
我有一种情况,我需要使用自定义调度程序来运行任务(这些必须是任务)并且调度程序没有设置同步上下文(所以我收集了 no ObserveOn
,SubscribeOn
等)。SynchronizationContextScheduler
以下是我最终如何做到的。现在,我想知道,我不确定这是否是进行异步调用并等待其结果的最合适方式。这是可以的还是有更健壮或惯用的方式?
如果不需要等待怎么办?
<编辑:我找到了一个具体的简化示例来说明我在这里所做的事情。基本上我在奥尔良使用 Rx,上面的代码是我要做的简单说明。虽然我也对这种情况感兴趣。
最终代码
事实证明,这在奥尔良语境中有点棘手。我不知道如何才能使用ObserveOn
,这正是我想要使用的东西。问题是通过使用它,Subscribe
永远不会被调用。编码:
此外,还有Codeplex Orleans 论坛上相关主题的链接。