2

サイドバイサイドバージョン管理で実行しようとしているc#式を使用したIISホストのxamlxワークフローがあります。

私はこの記事とまったく同じようにした:ワークフローサービスのサイドバイサイドバージョン管理

ワークフローの新しいインスタンスは期待どおりに機能しますが、以前のバージョンのワークフローのインスタンスを呼び出すと、コンパイルされていないことを示すエラーが発生します。

エラー:

コンパイルされた場所'auxData'のICompiledExpressionRootが見つかりません。この式を含むアクティビティの定義がコンパイルされていることを確認してください。

ところで、ワークフローをコンパイルするカスタムファクトリがあります。

<serviceActivations>        
    <add service="Service1.xamlx" relativeAddress="~/Service1.xamlx" factory="MyServiceHostFactory" />
</serviceActivations>
4

1 に答える 1

4

.Netのソースコードを分析した後、カスタムワークフローファクトリでオーバーライドするメソッドCreateWorkflowServiceHostが、サポートされているすべてのバージョンをその戻りオブジェクトに追加することに気付きました。

私がしなければならなかったのは、このコレクションを繰り返し、それらすべてをコンパイルすることです。

最終的なソースコード:

    protected override WorkflowServiceHost CreateWorkflowServiceHost(WorkflowService service, Uri[] baseAddresses)
    {
        var host = base.CreateWorkflowServiceHost(service, baseAddresses);

        // add your customizations here…
        CompileExpressions(service.Body);
        foreach (var supportedVersion in host.SupportedVersions)
        {
            CompileExpressions(supportedVersion.Body);
        }

        return host;
    }        
于 2013-03-18T14:48:16.823 に答える