1

Microsoft orleans (v0.9 プレビュー 2014 年 4 月)では、orleans グレインを参照する Azure Web API を作成するときに、次のエラーが発生する場合があります。

グレイン インターフェイスの実装クラスの型コードが見つかりません: 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();
}
4

1 に答える 1

3

これを修正するには:

Grain の実装と、Web APIのインターフェースを参照する必要があります。Visual Studio 2013 では、次の方法でこれを行います。

ソリューション エクスプローラー > api プロジェクトを右クリック > 参照 > 参照を追加 > ソリューション >インターフェイス実装の両方を選択

このソリューションは Codename Orleans v0.9 Preview April 2014 に適用されます

編集:

別の理由でこのエラーが発生する場合があります。これを穀物プロジェクトの .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 に答える