[英]MSOrleans 2.0 Ado.net Persistent
我正在 MsOrleans 上做 POC 並試圖在 ado.net 中保存糧食。 但是在啟動 Silo 時出現以下錯誤。
: Orleans.Runtime.SiloLifecycleSubject[100450]
Lifecycle observer Orleans.Storage.AdoNetGrainStorage-OrleansStorage failed to start due to errors at stage 10000.
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Orleans.Storage.AdoNetGrainStorage.Init(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\AdoNet\Orleans.Persistence.AdoNet\Storage\Provider\AdoNetGrainStorage.cs:line 409
at Orleans.Runtime.SiloLifecycleSubject.MonitoredObserver.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Lifecycle\SiloLifecycleSubject.cs:line 75
fail: Orleans.Runtime.SiloLifecycleSubject[100450]
Lifecycle start canceled due to errors at stage 10000
System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Orleans.Storage.AdoNetGrainStorage.Init(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\AdoNet\Orleans.Persistence.AdoNet\Storage\Provider\AdoNetGrainStorage.cs:line 409
at Orleans.Runtime.SiloLifecycleSubject.MonitoredObserver.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Lifecycle\SiloLifecycleSubject.cs:line 75
at Orleans.LifecycleSubject.WrapExecution(CancellationToken ct, Func`2 action) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 115
at Orleans.LifecycleSubject.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 55
fail: Orleans.Runtime.Silo[100439]
Exception during Silo.Start
Orleans.Runtime.OrleansLifecycleCanceledException: Lifecycle start canceled due to errors at stage 10000 ---> System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Orleans.Storage.AdoNetGrainStorage.Init(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\AdoNet\Orleans.Persistence.AdoNet\Storage\Provider\AdoNetGrainStorage.cs:line 409
at Orleans.Runtime.SiloLifecycleSubject.MonitoredObserver.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Lifecycle\SiloLifecycleSubject.cs:line 75
at Orleans.LifecycleSubject.WrapExecution(CancellationToken ct, Func`2 action) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 115
at Orleans.LifecycleSubject.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 55
--- End of inner exception stack trace ---
at Orleans.LifecycleSubject.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 63
at Orleans.Runtime.Scheduler.AsyncClosureWorkItem.Execute() in D:\build\agent\_work\23\s\src\Orleans.Runtime\Scheduler\ClosureWorkItem.cs:line 63
at Orleans.Runtime.Silo.StartAsync(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Silo\Silo.cs:line 264
Orleans.Runtime.OrleansLifecycleCanceledException: Lifecycle start canceled due to errors at stage 10000 ---> System.InvalidOperationException: Sequence contains no matching element
at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source, Func`2 predicate)
at Orleans.Storage.AdoNetGrainStorage.Init(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\AdoNet\Orleans.Persistence.AdoNet\Storage\Provider\AdoNetGrainStorage.cs:line 409
at Orleans.Runtime.SiloLifecycleSubject.MonitoredObserver.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Lifecycle\SiloLifecycleSubject.cs:line 75
at Orleans.LifecycleSubject.WrapExecution(CancellationToken ct, Func`2 action) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 115
at Orleans.LifecycleSubject.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 55
--- End of inner exception stack trace ---
at Orleans.LifecycleSubject.OnStart(CancellationToken ct) in D:\build\agent\_work\23\s\src\Orleans.Core\Lifecycle\LifecycleSubject.cs:line 63
at Orleans.Runtime.Scheduler.AsyncClosureWorkItem.Execute() in D:\build\agent\_work\23\s\src\Orleans.Runtime\Scheduler\ClosureWorkItem.cs:line 63
at Orleans.Runtime.Silo.StartAsync(CancellationToken cancellationToken) in D:\build\agent\_work\23\s\src\Orleans.Runtime\Silo\Silo.cs:line 264
當我在沒有持久性的情況下啟動它時,筒倉工作正常。
代碼示例:
筒倉adonet配置:
builder
.AddAdoNetGrainStorage("OrleansStorage", options =>
{
options.Invariant = "System.Data.SqlClient";
options.ConnectionString = orleansConfig.ConnectionString;
});
谷物類:
[StorageProvider(ProviderName = "OrleansStorage")]
class CatalogGrain : Orleans.Grain<CatalogState>, ICatalogGrain
{
public async Task AddProductGrainToCatalog(IProductGrain productGrain)
{
State.Products.Add(productGrain);
await base.WriteStateAsync();
}
}
public class CatalogState
{
public CatalogState()
{
Products = new List<IProductGrain>();
}
public string CatalogId { get; set; }
public List<IProductGrain> Products { get; set; }
}
對於錯誤,我可以看到您已運行腳本來創建表,但您錯過了向其中添加數據的腳本。 https://github.com/dotnet/orleans/blob/master/src/AdoNet/Orleans.Persistence.AdoNet/SQLServer-Persistence.sql文檔確實提到這是開發人員的常見錯誤。 通過逐步添加如何操作而不是如此通用,文檔可能會更好。
無論如何,運行腳本並讓我知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.