<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>BizTalk and around : Transactions</title><link>http://blogs.technet.com/stanko/archive/tags/Transactions/default.aspx</link><description>Tags: Transactions</description><dc:language>ru</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>WCF адаптер для очередей Oracle AQ</title><link>http://blogs.technet.com/stanko/archive/2008/11/20/wcf-oracle-aq.aspx</link><pubDate>Thu, 20 Nov 2008 14:05:53 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3156902</guid><dc:creator>yaroslav</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stanko/comments/3156902.aspx</comments><wfw:commentRss>http://blogs.technet.com/stanko/commentrss.aspx?PostID=3156902</wfw:commentRss><description>&lt;p&gt;Продолжая &lt;a href="http://blogs.technet.com/stanko/archive/2008/11/18/biztalk-wcf-lob-adapter-sdk.aspx"&gt;предыдущий пост&lt;/a&gt;, поделюсь опытом разработки транзакционного WCF адаптера для очередей Oracle Advanced Queuing (AQ). &lt;/p&gt; &lt;p&gt;&lt;b&gt;Предыстория&lt;/b&gt;  &lt;p&gt;Перед нами (&lt;a href="http://www.microsoft.com/services/microsoftservices/default.mspx"&gt;MCS&lt;/a&gt;) возникла задача показать возможность интеграции информационных систем построенных на Oracle с помощью BizTalk. В силу многих причин было принято решение не использовать хранимые процедуры и не подключаться к таблицам напрямую, а передавать данные в виде отдельных сообщений через очереди Oracle. Одним из требований была возможность гарантированной доставки, чтобы данные не удалялись из источника пока не попадут в следующее надежное хранилище, но и не попадали в следующие хранилище пока не удалятся из источника. Проще говоря, передача данных должна осуществляться в рамках транзакции.  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/WCFOracleAQ_C633/clip_image002_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="129" alt="clip_image002" src="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/WCFOracleAQ_C633/clip_image002_thumb.jpg" width="646" border="0"&gt;&lt;/a&gt;  &lt;p&gt;Для решения этой задачи нужно было найти существующий или разработать собственный адаптер, который бы умел подсоединяться к AQ и забирать данные внутри транзакции объединяющей источник данных (в данном случае AQ) и BizTalk MessageBox. На момент выбора адаптера для Oracle AQ у партнеров Microsoft уже существовали адаптеры умеющие работать с Oracle AQ, но все они имели некоторые ограничения, например отсутствие поддержки транзакций. Поэтому было принято решение разработать свой адаптер с помощью &lt;a href="http://www.microsoft.com/biztalk/technologies/wcflobadaptersdk.mspx"&gt;WCF LOB Adapter SDK&lt;/a&gt;.  &lt;p&gt;&lt;b&gt;Разработка адаптера&lt;/b&gt;  &lt;p&gt;Для решения задачи взаимодействия с AQ было рассмотрено множество вариантов, вот некоторые из них:  &lt;ul&gt; &lt;li&gt;JMS – нужен адаптер для JMS, подтверждение возможности транзакционной передачи получено не было.  &lt;li&gt;SOAP – дополнительное звено и необходимость развертывания веб-сервера на стороне базы данных. Транзакционность тоже под большим вопросом.  &lt;li&gt;PL\SQL через ODP.NET – нужна установка Oracle Client и ODP.NET. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;В итоге единственным приемлемым вариантом удовлетворявшим большинству требований оказался PL\SQL, который предоставляет простые команды для работы с очередями AQ, а ODP.NET предоставляет прозрачный интерфейс для работы с .NET транзакциями.  &lt;p&gt;После выбора способа взаимодействия дальнейшая реализация WCF адаптера заняла минимальное кол-во времени, включая поддержку транзакций и выгрузку метаданных для использования в BizTalk решении. Это говорит не столько об опытности Microsoft Consulting Services :), сколько о простоте инструментария WCF LOB Adapter SDK. Так что если перед вами стоит задача подключения к одной из унаследованных систем, или системе для которой ни у Microsoft ни у партнеров нет адаптера, вы можете написать его самостоятельно, это не так сложно как может показаться.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3156902" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stanko/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.technet.com/stanko/archive/tags/Oracle/default.aspx">Oracle</category><category domain="http://blogs.technet.com/stanko/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.technet.com/stanko/archive/tags/Transactions/default.aspx">Transactions</category><category domain="http://blogs.technet.com/stanko/archive/tags/AQ/default.aspx">AQ</category></item><item><title>Разработка транзакционных адаптеров для BizTalk с помощью WCF LOB Adapter SDK</title><link>http://blogs.technet.com/stanko/archive/2008/11/18/biztalk-wcf-lob-adapter-sdk.aspx</link><pubDate>Tue, 18 Nov 2008 11:57:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3155713</guid><dc:creator>yaroslav</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/stanko/comments/3155713.aspx</comments><wfw:commentRss>http://blogs.technet.com/stanko/commentrss.aspx?PostID=3155713</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;Сегодня я расскажу о том, как разработать &lt;B style="mso-bidi-font-weight: normal"&gt;собственный адаптер для BizTalk&lt;/B&gt; с помощью &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/biztalk/technologies/wcflobadaptersdk.mspx"&gt;&lt;FONT face=Calibri size=3&gt;WCF LOB Adapter SDK&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;и сделать его &lt;B style="mso-bidi-font-weight: normal"&gt;транзакционным&lt;/B&gt;.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; LINE-HEIGHT: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Перед началом разработки адаптера нужно убедиться, что у вас уже установлено:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;BizTalk Server 2006 R2&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo3"&gt;&lt;SPAN lang=RU style="FONT-FAMILY: Symbol; mso-ansi-language: RU; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Visual Studio 2005 SP1&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;.NET Framework 3.0&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo3"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;WCF LOB Adapter SDK 1.1&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;После этого, открыв &lt;/SPAN&gt;Visual&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;Studio&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; 2005, вы увидите в списке шаблонов проектов &lt;/SPAN&gt;WCF&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;LOB&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;Adapter&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;Можно попробовать сразу начать писать адаптер с нуля, используя шаблон, но если нет опыта, рекомендую выполнить &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb798134.aspx"&gt;&lt;FONT face=Calibri size=3&gt;пошаговый пример разработки эхо-адаптера&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;. Если времени совсем нет, можно посмотреть исходный код готового эхо-адаптера, он поставляется вместе с&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;WCF LOB Adapter SDK. Его&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU&gt; &lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;можно&lt;/SPAN&gt;&lt;SPAN lang=RU&gt; &lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;найти&lt;/SPAN&gt;&lt;SPAN lang=RU&gt; &lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;тут&lt;/SPAN&gt;: C:\Program Files\WCF LOB Adapter SDK\Documents\Samples. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Кстати в состав готового эхо-адаптера так же входит проект для сборки установочного &lt;/SPAN&gt;msi&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; пакета, позволяющий автоматизировано развертывать адаптер на других компьютерах.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;Как мы уже писали &lt;/FONT&gt;&lt;A href="http://blogs.technet.com/stanko/archive/2008/04/17/webcast-biztalk-adapter-pack.aspx"&gt;&lt;FONT face=Calibri color=#0000ff size=3&gt;ранее&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;, большой плюс WCF адаптеров в том, что их можно вызывать не только из BizTalk, но и из любого&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;.NET приложения. Во &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/bb798115.aspx"&gt;&lt;FONT face=Calibri size=3&gt;втором примере&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; как раз демонстрируется, как это сделать.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Поддержка транзакций&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;После того как мы научились создавать &lt;/SPAN&gt;WCF&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;адаптер, можем усложнить задачу и сделать его транзакционным. Зачем это нужно. Например, если вы хотите быть уверены &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;в том, что данные не удаляться из источника пока они не попадут в надежное хранилище, например &lt;/SPAN&gt;&lt;/SPAN&gt;BizTalk&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;Message Box. Для этого нужно чтобы запись в Message Box и удаление уже считанных данных из источника производилось в одной транзакции. Сначала это может показаться сложной задачей, ведь прежде чем попасть в Message Box сообщение может проходить сложную обработку в &lt;/SPAN&gt;&lt;/SPAN&gt;receive&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;pipeline, используя большое кол-во компонентов. Сразу возникает много вопросов, как создать транзакцию, как заставить BizTalk использовать эту же транзакцию при записи сообщения в Message Box, кто всем этим процессом будет управлять? Ответ прост, практически всю работу по созданию и управлению транзакцией берёт на себя WCF LOB Adapter &lt;/SPAN&gt;&lt;/SPAN&gt;Framework&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;, нужно только указать, что мы хотим использовать транзакции. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Для исходящих (outbound) операций&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;, транзакция создается автоматически. То есть метод&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Execute&lt;/B&gt; в &lt;B style="mso-bidi-font-weight: normal"&gt;IOutboundHandler&lt;/B&gt;,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;будет выполняться внутри &lt;B style="mso-bidi-font-weight: normal"&gt;TransactionScope&lt;/B&gt;, созданного WCF LOB Adapter &lt;/SPAN&gt;Framework&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; и если проверить значение переменной Transaction.Current, &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;то мы увидим, что оно не null. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Для входящих (inbound) операций&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; включить транзакции немного сложнее, существует 2 способа, для одностороннего (oneway) типа канала и канала запрос-ответ (&lt;/SPAN&gt;request&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;-&lt;/SPAN&gt;reply&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;). Реализовать 1й намного проще, начнем с него.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Односторонний (OneWay)&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l2 level1 lfo1"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;В конструкторе вашего адаптера установите &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;свойство &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.servicemodel.channels.common.messagingsettings.supportstransactedinbound.aspx"&gt;&lt;FONT face=Calibri size=3&gt;SupportsTransactedInbound&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; в true&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l2 level1 lfo1"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;В методе &lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;CreateBindingElements&lt;/B&gt;&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN lang=RU&gt;вашего &lt;/SPAN&gt;&lt;/SPAN&gt;Binding&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;класса, добавьте в начало коллекции &lt;/SPAN&gt;&lt;/SPAN&gt;BindingElements&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;элемент &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;OneWayBindingElement&lt;/B&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Обратите внимание, что его нужно добавлять только во время работы адаптера, то есть в случаях когда адаптер выполняет выгрузку метаданных этот элемент добавлять нельзя. Для этой цели можно добавить к списку свойств адаптера дополнительную булевою переменную. Её мы будем устанавливать только когда адптер выполняется, например, когда настраиваем параметры адаптера в свойствах BizTalk Receive location. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l2 level1 lfo1"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;3.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;После этого WCF будет самостоятельно создавать транзакцию и вызывать ваш метод TryReceive внутри неё. Так же он самостоятельно выполнит фиксацию транзакции после того как ваше сообщение попадет в MessageBox. Если же при обработке сообщения в pipeline произойдет исключение, то выполниться откат транзакции.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-INDENT: 0.25in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Примечание: В &lt;/SPAN&gt;BizTalk&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; нужно создать &lt;/SPAN&gt;OneWay&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;receive&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;порт.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Запрос-ответ (Request-Reply):&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l0 level1 lfo2"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;В конструкторе вашего адаптера установите &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;свойство &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.servicemodel.channels.common.messagingsettings.supportstransactedinbound.aspx"&gt;&lt;FONT face=Calibri size=3&gt;SupportsTransactedInbound&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; в false&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l0 level1 lfo2"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;В методе &lt;B style="mso-bidi-font-weight: normal"&gt;TryReceive&lt;/B&gt; создайте транзакцию самостоятельно.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l0 level1 lfo2"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;3.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Присвойте сообщению созданную транзакцию с помощью &lt;B style="mso-bidi-font-weight: normal"&gt;TransactionMessageProperty.Set&lt;/B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraph style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; LINE-HEIGHT: 115%; mso-list: l0 level1 lfo2"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT face=Calibri size=3&gt;4.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;В методе &lt;B style="mso-bidi-font-weight: normal"&gt;Reply&lt;/B&gt; вашей реализации &lt;B style="mso-bidi-font-weight: normal"&gt;IInboundReply&lt;/B&gt; зафиксируйте транзакцию.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt 0.25in"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;Примечание: В &lt;/SPAN&gt;BizTalk&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; нужно создать &lt;/SPAN&gt;Request&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;-&lt;/SPAN&gt;Reply&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;/SPAN&gt;receive&lt;SPAN style="mso-ansi-language: RU"&gt; &lt;SPAN lang=RU&gt;порт.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Поддержка транзакций источником данных&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;Если ваш источник данных транзакционный и его SDK умеет работать с механизмом транзакций .NET, то вам, скорее всего, ничего не придется делать. Например, Oracle провайдер &lt;/FONT&gt;&lt;A href="http://www.oracle.com/technology/tech/windows/odpnet/index.html"&gt;&lt;FONT face=Calibri size=3&gt;ODP.NET&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; такую поддержку имеет, и если открыть соединение внутри .&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;NET&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt; транзакции (&lt;B style="mso-bidi-font-weight: normal"&gt;TransactionScope&lt;/B&gt;) то все операции с базой данных Oracle будут выполняться в этой транзакции.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Заключение&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Если вы всё сделали правильно, то вы получили WCF адаптер, который вы можете использовать в своих решениях построенных на BizTalk Server или в любых других .NET приложениях.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN lang=RU style="mso-ansi-language: RU"&gt;&lt;FONT face=Calibri size=3&gt;P.S. В следующей версии WCF LOB Adapter SDK реализация односторонних операций станет ещё проще, достаточно будет установить одно свойство. О выходе новой версии мы обязательно сообщим, так что заходите на наш &lt;/FONT&gt;&lt;A href="http://blogs.technet.com/stanko"&gt;&lt;FONT face=Calibri size=3&gt;блог&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt; почаще, либо получайте обновления автоматически через &lt;/FONT&gt;&lt;A href="http://blogs.technet.com/stanko/rss.xml"&gt;&lt;FONT face=Calibri size=3&gt;RSS&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3155713" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stanko/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.technet.com/stanko/archive/tags/BizTalk/default.aspx">BizTalk</category><category domain="http://blogs.technet.com/stanko/archive/tags/Transactions/default.aspx">Transactions</category></item></channel></rss>