2009-03-18 6 views
1

皆さん、こんにちは皆さん、Sql Workflow Persistence Serviceはワークフローの状態を保存しません

ここではかなり奇妙な状況に対処しています。私はState Machine Workflowを開発しましたが、今日まではうまくいきました。 これで、Sql Workflow Persistence Serviceはワークフローの状態を保存しません。例外はありません。状態を保存しないだけです。このフローは、この記事linkに従うことで、ワークフローの状態を保存する必要がある条件の1つ(これまでにはうまくいきました)をイベント駆動型アクティビティに正常に移行しています。

SQLのワークフロー永続サービスの構成は次のようになります。ワークフローランタイムをホストし、同じワークフローの永続化データベースを使用して1つの以上のアプリケーションがありますので

 <workflowRuntime name="WorkfolwServiceHostRuntime" validateOnCreate="true" 
     enablePerformanceCounters="true"> 
     <services> 
      <add 
      type="System.Workflow.Runtime.Hosting.SqlWorkflowPersistenceService, 
       System.Workflow.Runtime, Version=3.0.00000.0, Culture=neutral, 
       PublicKeyToken=31bf3856ad364e35" 
      connectionString="Data Source=svr; 
       Initial Catalog=WorkflowPersistence; user id=User;password=Pass; 
       Trusted_Connection=False" LoadIntervalSeconds="1" 
       UnLoadOnIdle="true"/> 

     </services> 
     </workflowRuntime> 

たぶん問題があります。これが許可されているかどうかわかりませんでした。

なぜこのようなことが起こっているのかわからないので、私は何か提案を感謝します。

ありがとうございました

+0

WorkfolwServiceHostRuntime <上NonSerialized属性を置く必要がある、これらの変数を削除する必要はありませんか? – leppie

+0

いいえ、1つのように見えますが、そうではありません。 –

答えて

2

通常、ワークフローはアイドル状態になると永続化されます。どのくらい時間が持続するかは、ポーリング間隔(SQLPersistenceServiceの作成中に指定して実行時に割り当てる)などの要因によっても異なります。また、ワークフローが使用するすべてのもの、 ExternalDataEvent argsおよびイベントはSerializableとマークする必要があります。

例外処理に関しては、FaultHandlersActivityをワークフローに追加する必要があります。キャッチされた例外は、FaultHandlersActivityと共に公開されるFaultプロパティに保存されます。

希望します。タイプミス -

+0

ServiceCallInfoをSerializableとマークしました。明らかに、クラスをDataContract属性でマークするだけでは不十分です。Serializable属性も同様に必要です。 ソクラテスに感謝します。これは問題の真の解決策です。よろしく –

0

最後に、問題が見つかりました。 最初の投稿では、最初はすべてが魅力的でしたが、ワークフローの永続化には影響しないように少し変更しただけで、Sql Workflow Persistence Serviceは状態をデータベースに保存できませんでした。

私はWCFサービスとしてワークフローを公開していませんが、この問題を解決することが重要であることが判明しました。私は情報の欠如を解決しようとした皆様にお詫び申し上げます。

私はWCFサービス契約のメソッドを指している受信アクティビティを使用しました。そのメソッドは複合型の戻り値を持っていました。戻り値はワークフローの新しいプロパティにバインドされました。

public static DependencyProperty ReturnInfoProperty = DependencyProperty.Register("ReturnInfo", typeof(my.mynamespace.ServiceCallInfo), typeof(my.mynamespace.StandardContractingWorkflow)); 

    [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)] 
    [BrowsableAttribute(true)] 
    [CategoryAttribute("Parameters")] 
    public my.mynamespace.ServiceCallInfo ReturnInfo 
    { 
     get 
     { 
      return ((my.mynamespace.ServiceCallInfo)(base.GetValue(my.mynamespace.ReturnInfoProperty))); 
     } 
     set 
     { 
      base.SetValue(my.mynamespace.ReturnInfoProperty, value); 
     } 
    } 

私はどこかのワークフローのコードでこのプロパティをインスタンス化した場合、ワークフローランタイムが状態を保存するために失敗した、と私は状態が正しく保存されていることを実行しない場合は! 何らかの理由で、Workflow Runtimeがこのプロパティのためにワークフロー状態をシリアル化できない(またはSql Workflow Persistence Serviceを使用して状態を保存するために何かを行う)ことができなかったと思います。

多分それが原因ServiceCallInfoクラスの定義のですが、多分それは、これは、しかし...私はより多くの知識と経験を持った人が本当の理由だったことを言うことができるようになりますことを願って何か他のもの...

です問題は解決される。

0

Acctuallyあなたはちょうどその

関連する問題