Обработка ошибок WCF и MSMQ

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

7
задан abatishchev 29 May 2012 в 07:48
поделиться

2 ответа

Мертвый и яд два различных понятия. Подозрительные сообщения являются сообщениями, которые могут быть прочитаны из очереди, но Ваш код не знает, как обработать его так, Ваш код дает исключение. Если это продолжается в течение некоторого времени, Вы хотите, чтобы это сообщение было помещено на другую очередь, таким образом, Ваши другие сообщения могут быть обработаны. Хороший подход для этого описан на MSDN.

устаревший закон А является сообщением, которое даже не обрабатывается очередью. Сеть повреждается или получение, компьютер MSMQ закрывается. Что-то как этот. Сообщение будет автоматически помещено на мертвую очередь через какое-то время Windows. Таким образом, желательно записать сервис, который контролирует мертвую очередь.

8
ответ дан abatishchev 29 May 2012 в 18:48
поделиться

Подозрительное сообщение / очереди сообщений устаревшего закона используются для размещения сообщений, которые были полны решимости быть недоставленными в очереди, которая не попытается поставить им больше. Вы сделали бы это, если Вы могли бы хотеть вручную смотреть на неудавшиеся сообщения и обработать их позже. Вы используете подобные очереди, когда Вы хотите помешать плохим сообщениям ухудшать производительность Вашей системы путем повторения много раз.

, С другой стороны, служба поддержки использовалась бы, чтобы уведомить отправителя, что была ошибка при обработке сообщения. Обычно в этом случае Вы не планирование вручную обрабатывающий плохое сообщение и должны позволить системе, которая отправила сообщение, в котором был отклонен запрос.

Примечание, что они не эксклюзивны. При использовании очередей всегда существует шанс, что сериализация сообщения могла бы измениться достаточно для повреждения сообщений, которые находятся в очереди, в этом случае, Вы могли бы все еще хотеть иметь очередь устаревшего закона даже при использовании службы поддержки.

2
ответ дан jezell 29 May 2012 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: