1

Ocean Workstep派生クラスが本番環境にリリースされると(そしてクライアントによって使用されると)、その名前、名前空間、およびアセンブリ名は、将来の更新のために効果的にロックされるようです(下位互換性を確保するため)。

Petrelプロジェクトが保存されると、ワークステップ参照はバイナリファイルClasses.ptd内にフルタイプ名(名前空間、クラス、厳密なアセンブリ名)として保存されます。ロード中に、正確なタイプ名(アセンブリバージョンが無視されているように見える)を解決できない場合、ワークフローエディターにワークステップが「ワークステップが利用できません」と表示されます。

私たちが遭遇したバイナリシリアル化の他のインスタンスでは、PetrelはSerializationBinder登録済みを利用PetrelSystem.ProjectSerializationServiceします-Workstepインスタンスではそうではありません。

Workstepクラス/名前空間/アセンブリの名前変更を容易にする他の方法はありますか?

なぜこの振る舞いは(もしあったとしても)あまり文書化されていないのですか?私たちは何かを誤解しましたか?

4

1 に答える 1

3

この問題は、実際にはOcean2012.1APIで修正されます。ワークステップ参照には、バージョン番号が含まれなくなります。ワークステップとプロセスのシリアル化の両方がクリーンアップされます。バージョン番号はシリアル化されておらず(逆シリアル化では使用されません)、タイプ名の代わりにUniqueIdを使用できます。

これは、このテーマに関する2012.1Oceanリリースノートの抜粋です。

プロセスとワークステップの一意のID名前空間:Slb.Ocean.Petrel.Workflow

Oceanを介して作成されたプロセスとワークステップには、これまで適切な識別子がありませんでした。それらは、バージョン番号を含むフルタイプ名で識別されました。これは、たとえば、次の場合に識別子が変更される可能性があることを意味します。-プラグインアセンブリのバージョン番号が増加した(新しいプラグインのインストールなど)。-プロセス/ワークステップクラスが新しいアセンブリに移動されました。-プロセス/ワークステップクラスの名前空間が変更されました。これにより、お気に入りツリーにプロセス名の代わりに「壊れたリンク」が表示されたり、ワークフローエディタに「ワークステップが利用できません」と表示されたりするなど、Petrelで問題が発生する可能性があります。

これを解決するために、Oceanはプロセスとワークステップの識別子からバージョン番号を削除し、Petrelアプリケーション全体で一意となるカスタムプロセスとワークステップのユーザー定義の識別子をサポートする新しいAPIを提供しています。Oceanを介して作成されたプロセス/ワークステップはすべて、一意の識別子を実装する必要があります。

以下を参照してください。-Process.UniqueIdプロセスの一意の識別子をWorkstep.UniqueId定義する-ワークステップの一意の識別子を定義する。新しいAPIは、すでにシリアル化されているプロセス/ワークステップの下位互換性サポートと、シリアル化ロジックのいくつかの変更も提供します。レガシープロジェクトが開かれているとき、古いスタイルのIDは、デシリアライズ中に自動的に新しいIDに置き換えられます。

よろしく、ガエル

于 2012-03-20T16:34:18.837 に答える