コアサービスを介してトリガされたイベントシステムからのコンフィグレーションへのアクセス


19

コアサービスを介してイベントをトリガするときに、イベントシステムに問題が発生します。

Tridionの同じインスタンス内の別のパブリケーションにコピーする必要があるパブリケーションにコンポーネントが保存されています。これらのコンポーネントは、コアサービスを使用する別のアプリケーションから保存されます。

要約: webappでコンポーネントを作成/更新 - コアサービス経由で1つのパブリケーションに保存 - >イベントシステムは、2番目のパブリケーションでコピーを作成/更新します。

我々が使用してイベントをサブスクライブ:コピーを

var configuration = ConfigurationManager.GetSection("custom.events") as NameValueCollection; 
return configuration["Debug"]; 

:私たちはTridion.ContentManager.configファイルに保存されているいくつかの設定値を持っており、同様のものを使用してこれらにアクセス

EventSystem.Subscribe<Component, SaveEventArgs>(Copy, EventPhases.TransactionCommitted); 

をメソッドはインターフェイスでコンポーネントを手動で開くと正常に動作し、保存は期待どおり正確に行われます。設定値は細かく読み取られ、コンポーネントはすべての正しいコンテンツとメタデータでコピーされます。

コアサービスを使用してコンポーネントを外部に保存しようとすると、イベントシステムが停止します。次のように私たちが見ているエラーは、次のとおりです。コアを介してアクセスするときTridionの設定ファイルを読み込む方法で異なるものがある場合

Object reference not set to an instance of an object. 

StackTrace Information Details: 
    at Custom.EventsSystem.Configuration.Config.get_Debug() 
    at Custom.EventsSystem.Sync.Copy(Component component, SaveEventArgs args, EventPhases phase) 
    at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Delegate.DynamicInvokeImpl(Object[] args) 
    at Tridion.ContentManager.Extensibility.EventSubscription.DeliverEvent(IEnumerable'1 subjects, TcmEventArgs eventArgs, EventPhases phase) 

がsaveは、コアサービスを介してトリガされたときにのみ起こるので、私は疑問に思いますサービス?

私たちが手動で処理するTridionとは別の設定ファイルを用意する方が良いでしょうか?

  0

コンポーネントを1つのパブリケーションに保存するとコアサービスは、イベントシステムを使用する代わりに、コアサービスを使用して別のパブリケーションへのコピーを作成できませんか? 08 5月. 132013-05-08 12:18:54

  0

Ibrarが示唆していることに加えて、Event Systemでコアサービスを使用すべきではありませんが、TOM.NET APIを使用する必要があります。 08 5月. 132013-05-08 12:31:17

  0

重要なレガシーコードを変更することなく、コアサービスを再び使用することはできません。コンポーネントは青写真の両方の場所で必要ですが、青写真を修正してアイテムを共有することはできません。 08 5月. 132013-05-08 12:38:10

11

コアサービスにどのように接続しますか? netTCPバインディングまたはwsHttp/basicHttpバインディングを使用していますか?前者の場合、app.configファイルはTcmServiceHost.exe.config、後者は%TRIDION_HOME%\ webservicesのweb.config ...

+1

これは治療になりました。 wsHttpバインディングを使用してwebservices \ web.configを修正し、私たちのカスタムセクションを含めて問題を修正しました。乾杯、ビヨン。 09 5月. 132013-05-09 09:01:03


13

これは、あなたがこのようなあなたのコードを書いた場合

をキャスト「として」ある悪の偉大な例です。代わりにnull参照例外の

var configuration = (NameValueCollection)ConfigurationManager.GetSection("custom.events"); 

、あなたが取得したいですGetSectionがConfigurationSectionを返すときにCast例外が無効です。設定セクションが存在しない場合は、ヌル参照チェックを実装する必要があります。そうでない場合は、インデクサーを逆参照しようとすると即座にスローされます。configuration["Debug"]

+2

+2、ちょうど+1がキャストが "どんな"悪いかについては十分ではないので、o) 08 5月. 132013-05-08 15:45:47

  0

@BartKoopman昨日それらの "訓練サンプル"であなたを迎えなかったことを幸運にも数えます。:-) 08 5月. 132013-05-08 18:14:32

  0

あなたは正しいです、明日その例を変更しましょう.O)、そこで言及されているとおり、私は例を使用しています。そしてキャストはもちろん悪いですが、その例では有効なものになります(私の防衛では) 09 5月. 132013-05-09 22:09:53