1

在 microsoft orleans (v0.9 Preview April 2014)中,您在创建引用 orleans grains 的 azure web-api 时可能会收到此错误:

找不到grain接口的实现类的类型代码:729000394
。确保grain组件已正确部署并加载到silo中。

以下是一些可能会产生此错误的示例 api 代码:

public class GrainController: ApiController
{

    public GrainControllerController() { 

    }


    public async Task<List<Model>> Get() {
        var grain = MyGrainFactory.GetGrain(0);
        return await grain.GetModels();
    }
}

这是一些谷物代码:

public class MyGrain: Orleans.GrainBase, IMyGrain
{
    public Task<List<Model>> GetModels()
    {
        return Task.FromResult(new List<Model>() { 

            new Model(){
                 name="my model name"
            }
        });
    }
}

public interface IMyGrain : Orleans.IGrain
{
    Task<List<Model>> GetModel();
}
4

1 回答 1

3

要解决这个问题:

你必须引用你的 Grain实现,以及你的 web api 中的接口。在 Visual Studio 2013 中,您可以通过以下方式执行此操作:

解决方案资源管理器 > 右键单击​​您的 api 项目 > 参考 > 添加参考 > 解决方案 > 选择接口实现

此解决方案适用于 Codename Orleans v0.9 Preview 2014 年 4 月

编辑:

由于其他原因,您可能会遇到此错误。我们不小心从我们的 grains 项目的 .csproj 文件中删除了它。

<Import Project="$(OrleansSDK)\Binaries\OrleansClient\Orleans.SDK.targets" />

这会导致多个不同的错误,例如,您的 codegen.cs 文件可能不会在新版本上重新编译。

此外,您可能已将其从 .csproj 文件中删除:

<PropertyGroup>
    <PostBuildEvent>
      if exist "$(OrleansSDK)\LocalSilo" (
      if not exist "$(OrleansSDK)\LocalSilo\Applications" (md "$(OrleansSDK)\LocalSilo\Applications")
      if not exist  "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)" (md "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)")
      copy /y *.dll  "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\"
      copy /y *.pdb  "$(OrleansSDK)\LocalSilo\Applications\$(RootNamespace)\"
      )
      if exist "$(OrleansSDK)\Binaries" (
      if not exist "$(OrleansSDK)\Binaries\Applications" (md "$(OrleansSDK)\Binaries\Applications")
      if not exist  "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)" (md "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)")
      copy /y *.dll "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\"
      copy /y *.pdb "$(OrleansSDK)\Binaries\Applications\$(RootNamespace)\"
      )
    </PostBuildEvent>
  </PropertyGroup>

这就是允许您在当地筒仓中运行谷物的原因。希望这可以帮助!

于 2014-06-25T15:44:26.707 回答