Как не потерять данные между доступными данными опроса и оператором опроса в пользовательском оракуле WCF

примечание, не уверен, что заголовок является лучшим заголовком

У нас есть порт получения BizTalk, который собирает данные со стандартными доступными данными опроса, оператором опроса и оператором пост-опроса.

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

это оставляет 1 или 2 строки базы данных в день помеченными как обработанные без обработки. мы выключали и включали параметр внешней транзакции, но этот эффект остается прежним в наших тестах.

Это кажется мне серьезной проблемой, и не может быть, что мы единственные, у кого есть эта проблема? есть ли способ решить это? Я думал о написании sendPort, который обновляет базу данных и не использует оператор postpoll, но это было бы довольно лишней логикой, и я не вижу способа сделать это, не создавая Orchestrations для каждого отдельного проекта, который дистрибутируется. рекомендовано лучшими практиками (попробуйте использовать прямую привязку отправки для получения портов)


person Andy    schedule 01.04.2014    source источник


Ответы (2)


Если у вас есть контроль над опрашиваемой таблицей базы данных, добавьте еще один столбец типа uniqueidentifier. При выполнении оператора PollingDataAvailable установите для переменной значение newid() и обновите столбец с этим идентификатором + сохраните его где-нибудь для чтения (предпочтительно в другой таблице).

В вашем PollingStatement вы можете прочитать последний GUID из отдельной таблицы и получить только то, что было обновлено в вашей фактической таблице опроса + пометить их как обработанные.

Таким образом, дубликаты не будут опрошены, и вы получите все.

Кроме того, если у вас есть несколько серверов BizTalk в группе, рассмотрите возможность разделения узла только для опроса SQL и кластеризации этого узла (или сделайте один активным, а другой пассивным). То, как опрос работает с несколькими хостами, иногда затрудняет сбор записей.

Надеюсь это поможет!

person Pieter Vandenheede    schedule 02.04.2014
comment
Как бы вы установили такую ​​переменную. я имею в виду, можете ли вы сделать обновление во время выбора в операторе опроса BizTalk? - person Andy; 02.04.2014
comment
@Andy, вы можете вызвать хранимую процедуру, чтобы сначала выполнить обновление, а затем выполнить выбор счетчика () - person Pieter Vandenheede; 03.04.2014

Итак, похоже, что утверждение Post Poll немного оптимистично или просто делает неверное предположение, в частности, что все было обработано оператором Polling. На самом деле это не проблема клиента.

Я бы порекомендовал отказаться от доступных данных опроса и опубликовать опрос и опрос с помощью хранимой процедуры. SP должен возвращать только «обработанные» записи, чтобы все новое было получено в следующем интервале.

Если вы не можете использовать хранимую процедуру, то оператор опроса должен установить флаг, после чего пост-опрос будет обновлять только записи с этим флагом.

person Johns-305    schedule 01.04.2014
comment
Мы изучили ваш совет по хранимым процедурам, и не могли бы вы привести пример использования хранимых процедур с BizTalk. - person Andy; 02.04.2014
comment
Это довольно просто и хорошо задокументировано в MSDN и других местах: msdn.microsoft.com /en-us/library/dd788064.aspx - person Johns-305; 02.04.2014
comment
По образцу пометьте записи для этого интервала, обработайте помеченные записи, верните помеченные записи. Таким образом, каждый вызов «требует» своих записей, и любой из них работает только с ними. - person Johns-305; 02.04.2014