質問
いを作成し、WCFサービス、利用netMsmqBindingます。
これは、単純なサービスを通過するとDtoマーサービスの方法な期待に応じます。メッセージに入れることでMSMQ、拾挿入したデータベース化します。
何が最善の方法を確なデータを失っています。
この2以下のいずれかの方法が
例外がスローされ
この場所にメッセージをデッド文字列のためのマニュアル閲覧.できることが私のstrvice開始
セットのreceiveRetryCount="3"の結合
るとき3の試み-ゆえに起こるinstantanouslyこのようにメッセージキューが断層私のサービスです。再起動マーサービスを繰り返します。
理想的にしたいと思っている。
み過程のメッセージ
- これが失敗した場合は、5分というメッセージとして再接続してください。
- 場合そのプロセスに失敗した3時間、移動、メッセージに書キューに挿入します
- 電源の再投入により自動的に復帰サービスの新しいパートナーシップをすべてのメッセージからの死者の書キューバのキューできるように処理されます。
私達成。その場合いかがですか?きもいい記事をどう活用し、WCFとMSMQったsceneria.
他の助けがよろしくお願いいたします。よろしく!
一部の追加情報
を使用していMSMQ3.0Windows XPやWindows Server2003年.残念ながら利用できないので毒のメッセージ援MSMQ4.0/Vista/2008年.
解決
ありサンプルのSDKが役立ちます。基本的にはかなを付けて下さIErrorHandler実施へのサービスのキャッチコピーでエラーがWCF宣言のメッセージの"毒"(すべての設定を再て).どのサンプルな動きのメッセージを他のキューを再開しますServiceHostに関連するメッセージですフロントの対応もよく、部屋の場合の毒のメッセージを発見した).
なんサンプルが可能であり、これまでのように役立ちます。あるカップルでの制限もの:
1-が複数ある場合には評価項目に関連するサービス(露出を通して複数のキュー)にありないから、大変な作業だったと思いるキューの毒のメッセージが到着。いただけるお客様は単一のキューのこのな問題です。したいと思ってい合公式回避策のためにこんな実験も行することを可能と代替するか記録はこちら http://winterdom.com/weblog/2008/05/27/NetMSMQAndPoisonMessages.aspx
2-このメッセージの移動を別のキューになり、お客様の責任でますので、処理キューに一度のタイムアウトを行っております(または添付の新しいサービスのキューの取り扱います。
正直、いずれの場合も、いただいている一部の"マニュアル"を作る、WCFでを網羅していませんでした。
って最近は異なるプロジェクトのしたいことが分かった要件が明示的に制御が再起こし、現在の溶液を作るセットのリトライのキューを手動での移動メッセージ間のリトライのキューの処理キューに基づくセットのタイマーやヒューリスティクス用の原システム。メールのものMSMQます.そうかも、カップルのgotchasればなります。
他のヒント
と思うとMSMQ(みみVistaることができるかもしれませんようになります:
<bindings>
<netMsmqBinding>
<binding name="PosionMessageHandling"
receiveRetryCount="3"
retryCycleDelay="00:05:00"
maxRetryCycles="3"
receiveErrorHandling="Move" />
</netMsmqBinding>
</bindings>
WCFは直ちにリトライのためのReceiveRetryCount後、最初の呼び出します。後のバッチに失敗したメッセージに移転 に再度キューに挿入します遅れのRetryCycleDelay分には、メッセージからのリトライのキューの評価項目でキューやバッチで再試行.この繰り返し MaxRetryCycleます。場合にエラーが発生した場合のメッセージに従い取り扱いますreceiveErrorHandlingできる移動 (毒キュー)、拒否、または断層
ように良いアカウントとリンWCFとMSMQのchapther9Progammig WCF書からJuval Lowy
使用している場合は、SQL-Serverを使用する分散トランザクション、両方MSMQ、SQLサーバーのサポートします。かく包むデータベースで書き込TransactionScopeブロックと呼びます。Complete()されていない場合にのみが成功する.失敗した場合、その時WCF方法を返しますメッセージを置きのキューをしました。この刈込版のコードを使ってい:
[OperationBehavior(TransactionScopeRequired=true, TransactionAutoComplete=true)]
public void InsertRecord(RecordType record)
{
try
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
SqlConnection InsertConnection = new SqlConnection(ConnectionString);
InsertConnection.Open();
// Insert statements go here
InsertConnection.Close();
// Vote to commit the transaction if there were no failures
scope.Complete();
}
}
catch (Exception ex)
{
logger.WarnException(string.Format("Distributed transaction failure for {0}",
Transaction.Current.TransactionInformation.DistributedIdentifier.ToString()),
ex);
}
}
私はこの試験による待ち行列の大で知られるデータの数、WCF始め多くのスレッド対応その多くが同時に達成16スレッド--16メッセージの混雑またはコンピューター-後、死の過程の中の事業です。のプログラムは再起動のメッセージが読み上げからキューの処理として再れば何事もなかったかのように、同試験のデータベースは一貫性には欠けます。
分散トランザクションマネージャは、周囲の存在は、新規作成する場合のインスタンスTransactionScopeで自動的に検索のための現在のトランザクションの範囲内で法invokationるべき作成されていてよWCFでポップメッセージをキューと呼び出された御方法。
残念なことんこだわったWindows XPおよびWindows Server2003のようなオプションでした。-(いことを明らかに私の問題としていたこのソリューションの後、投稿、実現が使えなかったので)
その一つ解決した設定をカスタムハンドラを動かすメッセージを他のキューまたは毒キュータマサービスです。このたった。私の想像Sqlサーバーした方も多いのでサービスが開始される予定である.
そんどろ風mikiモデルを作ってみ終わっては、回線断層およびメントをキューに挿入しますものログをと致命的なメッセージ私のシステムのログインされるサービスが起こっていることを知った。一度弊社の問題を解決し、再スターのサービスおよびすべてのメッセージを取得する開始処理します。
今再処理このメッセージまたはその他のすべて失敗ではなぜこんなに移行する必要があることのメッセージ、その他にもキューに挿入しますったりするのも良いかもしれからもサービスを開始できるものとします。
aogan、最適な答えMSMQ4.0ものの、残念なことになっ