.net 如何调用Orleans grain方法而不参考grain实现?
如何调用Orleans grain方法而不参考grain实现.net 如何调用Orleans grain方法而不参考grain实现?,.net,.net-core,orleans,.net,.net Core,Orleans,如何调用Orleans grain方法而不参考grain实现 Grain client-.Net核心应用程序 Grain实现类-经典的.Net Framework库,不能添加到.Net核心应用程序中 从客户项目中仅参考接口项目(核心->标准) 从主项目引用中,实现项目(完整->完整)和实现项目引用接口项目(完整->标准) 它就像一个符咒,请参见:从客户机项目中仅参考接口项目(核心->标准) 从主项目引用中,实现项目(完整->完整)和实现项目引用接口项目(完整->标准) 它就像一个符咒,请参见:
- Grain client-.Net核心应用程序
- Grain实现类-经典的.Net Framework库,不能添加到.Net核心应用程序中
它就像一个符咒,请参见:从客户机项目中仅参考接口项目(核心->标准) 从主项目引用中,实现项目(完整->完整)和实现项目引用接口项目(完整->标准) 它就像一个符咒,请参见:Minimal Orleans sample 服务器 .Net Framework控制台应用程序
Install-Package Microsoft.Orleans.Core.Abstractions
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Server
class Program
{
static async Task Main(string[] args)
{
await StartSilo();
}
static async Task StartSilo()
{
using (var host = new SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
await host.StartAsync();
Console.WriteLine("Silo started. Press any key to terminate...");
Console.ReadKey();
}
}
}
public class SampleGrain : Grain, ISample
{
public Task<string> Ping(string message)
{
Console.WriteLine($"Pinged with '{message}'");
return Task.FromResult($"Message '{message}' received");
}
}
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Client
static async Task Main(string[] args)
{
await PingSample();
}
static async Task PingSample()
{
using (var client = new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
await client.Connect();
Console.WriteLine("Client successfully connected to silo host.");
var sample = client.GetGrain<ISample>("one");
var result = await sample.Ping("hello");
Console.WriteLine(result);
}
}
安装软件包Microsoft.Orleans.Core.Abstractions
安装软件包Microsoft.Orleans.OrleansCodeGenerator.Build
安装软件包Microsoft.Orleans.Server
班级计划
{
静态异步任务主(字符串[]args)
{
等待开始silo();
}
静态异步任务StartSilo()
{
使用(var host=new-SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging=>logging.AddConsole())
.ConfigureApplicationParts(parts=>parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
等待host.StartAsync();
Console.WriteLine(“思洛存储器已启动。按任意键终止…”);
Console.ReadKey();
}
}
}
公共类样本Grain:Grain,ISample
{
公共任务Ping(字符串消息)
{
WriteLine($“ping为“{message}”);
返回Task.FromResult($“已收到消息{Message}”);
}
}
接口
.Net标准类库
Install-Package Microsoft.Orleans.Core.Abstractions
public interface ISample : IGrainWithStringKey
{
Task<string> Ping(string message);
}
安装软件包Microsoft.Orleans.Core.Abstractions
公共接口很简单:IGrainWithStringKey
{
任务Ping(字符串消息);
}
客户
.Net核心控制台应用程序
Install-Package Microsoft.Orleans.Core.Abstractions
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Server
class Program
{
static async Task Main(string[] args)
{
await StartSilo();
}
static async Task StartSilo()
{
using (var host = new SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
await host.StartAsync();
Console.WriteLine("Silo started. Press any key to terminate...");
Console.ReadKey();
}
}
}
public class SampleGrain : Grain, ISample
{
public Task<string> Ping(string message)
{
Console.WriteLine($"Pinged with '{message}'");
return Task.FromResult($"Message '{message}' received");
}
}
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Client
static async Task Main(string[] args)
{
await PingSample();
}
static async Task PingSample()
{
using (var client = new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
await client.Connect();
Console.WriteLine("Client successfully connected to silo host.");
var sample = client.GetGrain<ISample>("one");
var result = await sample.Ping("hello");
Console.WriteLine(result);
}
}
安装软件包Microsoft.Orleans.OrleansCodeGenerator.Build
安装软件包Microsoft.Orleans.Client
静态异步任务主(字符串[]args)
{
等待PingSample();
}
静态异步任务PingSample()
{
使用(var client=new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging=>logging.AddConsole())
.ConfigureApplicationParts(parts=>parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
等待client.Connect();
WriteLine(“客户端成功连接到思洛存储器主机”);
var样本=client.GetGrain(“一”);
var result=wait sample.Ping(“你好”);
控制台写入线(结果);
}
}
最小奥尔良样本
服务器
.Net Framework控制台应用程序
Install-Package Microsoft.Orleans.Core.Abstractions
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Server
class Program
{
static async Task Main(string[] args)
{
await StartSilo();
}
static async Task StartSilo()
{
using (var host = new SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
await host.StartAsync();
Console.WriteLine("Silo started. Press any key to terminate...");
Console.ReadKey();
}
}
}
public class SampleGrain : Grain, ISample
{
public Task<string> Ping(string message)
{
Console.WriteLine($"Pinged with '{message}'");
return Task.FromResult($"Message '{message}' received");
}
}
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Client
static async Task Main(string[] args)
{
await PingSample();
}
static async Task PingSample()
{
using (var client = new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
await client.Connect();
Console.WriteLine("Client successfully connected to silo host.");
var sample = client.GetGrain<ISample>("one");
var result = await sample.Ping("hello");
Console.WriteLine(result);
}
}
安装软件包Microsoft.Orleans.Core.Abstractions
安装软件包Microsoft.Orleans.OrleansCodeGenerator.Build
安装软件包Microsoft.Orleans.Server
班级计划
{
静态异步任务主(字符串[]args)
{
等待开始silo();
}
静态异步任务StartSilo()
{
使用(var host=new-SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging=>logging.AddConsole())
.ConfigureApplicationParts(parts=>parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
等待host.StartAsync();
Console.WriteLine(“思洛存储器已启动。按任意键终止…”);
Console.ReadKey();
}
}
}
公共类样本Grain:Grain,ISample
{
公共任务Ping(字符串消息)
{
WriteLine($“ping为“{message}”);
返回Task.FromResult($“已收到消息{Message}”);
}
}
接口
.Net标准类库
Install-Package Microsoft.Orleans.Core.Abstractions
public interface ISample : IGrainWithStringKey
{
Task<string> Ping(string message);
}
安装软件包Microsoft.Orleans.Core.Abstractions
公共接口很简单:IGrainWithStringKey
{
任务Ping(字符串消息);
}
客户
.Net核心控制台应用程序
Install-Package Microsoft.Orleans.Core.Abstractions
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Server
class Program
{
static async Task Main(string[] args)
{
await StartSilo();
}
static async Task StartSilo()
{
using (var host = new SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
await host.StartAsync();
Console.WriteLine("Silo started. Press any key to terminate...");
Console.ReadKey();
}
}
}
public class SampleGrain : Grain, ISample
{
public Task<string> Ping(string message)
{
Console.WriteLine($"Pinged with '{message}'");
return Task.FromResult($"Message '{message}' received");
}
}
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Client
static async Task Main(string[] args)
{
await PingSample();
}
static async Task PingSample()
{
using (var client = new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
await client.Connect();
Console.WriteLine("Client successfully connected to silo host.");
var sample = client.GetGrain<ISample>("one");
var result = await sample.Ping("hello");
Console.WriteLine(result);
}
}
安装软件包Microsoft.Orleans.OrleansCodeGenerator.Build
安装软件包Microsoft.Orleans.Client
静态异步任务主(字符串[]args)
{
等待PingSample();
}
静态异步任务PingSample()
{
使用(var client=new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging=>logging.AddConsole())
.ConfigureApplicationParts(parts=>parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
等待client.Connect();
WriteLine(“客户端成功连接到思洛存储器主机”);
var样本=client.GetGrain(“一”);
var result=wait sample.Ping(“你好”);
控制台写入线(结果);
}
}
将grain接口添加到核心项目中,从框架实现中引用它,核心客户端不工作?@lmagyar不工作,错误:找不到grain接口的实现类:IBlaBla。确保谷物组件正确部署并装载到筒仓中。和编写的文档:向客户端代码添加接口和实现引用。可能您遗漏了一些内容,例如,从实现中引用谷物基类,这可能会导致类似的错误,因为是的,接口没有实现(实现继承接口和基谷物类)。请看下面我的答案。@感谢您提供项目示例。我错过了对Microsoft.Orleans.OrleansCodeGenerator.build的引用。将grain接口添加到核心项目,从框架实现中引用它,而核心客户端不工作?@lmagyar不工作,错误:找不到grain接口的实现类:IBlaBla。确保谷物组件正确部署并装入sil中