【问题标题】:Cannot find a type code for an implementation class for grain interface找不到grain接口的实现类的类型代码
【发布时间】:2014-07-03 23:58:56
【问题描述】:

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

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

这里是一些可能产生此错误的示例 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();
}

【问题讨论】:

    标签: c# .net orleans


    【解决方案1】:

    解决这个问题:

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

    Solution Explorer > 右键单击​​您的 api 项目 > 参考 > 添加参考 > 解决方案 > 选择 interfacesimplementations

    此解决方案适用于 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>
    

    这就是让您可以在本地筒仓中运行谷物的原因。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 2011-11-27
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      相关资源
      最近更新 更多