我正在关注orleans example在此示例中,它们不是在同一应用程序域中运行筒仓和客户端,而是进行遍历,以便两者都可以独立启动。我按照建议进行了更改。我修改了 IGrain1.cs 以接受字符串作为参数
Task<string> SayHello(string greetings);
修改grain1.cs实现代码如下
private string text = "Hello World!";
public Task<string> SayHello(string greetings)
{
var oldText = text;
text = greetings;
return Task.FromResult(oldText);
}
当我运行筒仓时,它始终无法启动筒仓并出现此错误
"TypeLoadException: Method 'SayHello' in type 'GrainCollection1.Grain1' from assembly 'GrainCollection1...'
接口(interface)和颗粒定义都匹配。我在这里缺少一些简单的东西?
最佳答案
查看 c:\Microsoft Codename Orleans SDK v0.9\SDK\LocalSilo\Applications。 CodeGen 为每个 Orleans 项目构建一个文件夹。当本地筒仓启动时,初始化程序会扫描此目录中的程序集。
尝试删除 ../Applications 中的文件夹并重建您的解决方案。您应该会看到使用重建的grain 和接口(interface)DLL 重新创建的项目文件夹。
在 DevTestServerConfiguration.xml 中,将 Tracing/DefaultTraceLevel 从“警告”更改为“信息”。当您运行 InitSilo 时,您将看到筒仓正在寻找什么以及它抛出的错误。这将我指向了 SDK silo 文件夹。
编辑:您可能还需要删除 ..\SDK\Binaries 中的文件夹。请务必在删除后立即重建整个项目。
关于c# - 为什么奥尔良筒仓在更改“打招呼”示例以支持主机和 Cereal 后开始失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825822/