<?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 : WCF</title><link>http://blogs.technet.com/stanko/archive/tags/WCF/default.aspx</link><description>Tags: WCF</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><item><title>Июньские MSDN веб-касты о WCF/WF</title><link>http://blogs.technet.com/stanko/archive/2008/06/11/msdn-wcf-wf.aspx</link><pubDate>Wed, 11 Jun 2008 17:04:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3069473</guid><dc:creator>stas</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stanko/comments/3069473.aspx</comments><wfw:commentRss>http://blogs.technet.com/stanko/commentrss.aspx?PostID=3069473</wfw:commentRss><description>&lt;P&gt;Начиная со следующей среды (18.06) наши коллеги из Редмонда организуют серию MSDN веб-кастов о WCF и WF. &lt;/P&gt;
&lt;P&gt;Ссылки на касты доступны здесь: &lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: RU; mso-bidi-language: AR-SA"&gt;:&lt;SPAN style="COLOR: #1f497d"&gt;&amp;nbsp; &lt;A href="http://www.microsoft.com/events/series/msdnnetframework35.aspx?tab=webcasts&amp;amp;id=liveall" mce_href="http://www.microsoft.com/events/series/msdnnetframework35.aspx?tab=webcasts&amp;amp;id=liveall"&gt;http://www.microsoft.com/events/series/msdnnetframework35.aspx?tab=webcasts&amp;amp;id=liveall&lt;/A&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: RU; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: RU; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT face=Arial color=#000000 size=2&gt;Программа следующая:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; 
&lt;TABLE class=MsoNormalTable style="MARGIN: auto auto auto 30.6pt; WIDTH: 662pt; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 0cm 0cm 0cm" cellSpacing=0 cellPadding=0 width=883 border=0 class="MsoNormalTable"&gt;
&lt;TBODY&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=bottom noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Webcast Title&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;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=bottom noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Date/ Time&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=bottom noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Presenter&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 1"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="COLOR: black"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032379027&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Beyond the Endpoints with Windows Communication Foundation&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;FONT size=3&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;6/18/2008 10:00 AM&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt; PST&lt;SPAN style="COLOR: black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Juval Lowy&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 2"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="COLOR: black"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032379979&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff size=3&gt;geekSpeak: Workflow Services in .NET 3.5 with Jon Flanders&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;FONT size=3&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;6/18/2008 12:00 PM&lt;/SPAN&gt;&lt;SPAN style="COLOR: #1f497d; FONT-FAMILY: 'Calibri','sans-serif'; mso-themecolor: dark2"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;PST&lt;SPAN style="COLOR: black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="COLOR: black; FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Jon Flanders&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 3"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032380765&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff size=3&gt;Calling Services from Silverlight 2.0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;6/23/2008 09:00 AM&lt;SPAN style="COLOR: #1f497d; mso-themecolor: dark2"&gt; &lt;/SPAN&gt;PST&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Jon Flanders&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 4"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032380767&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff size=3&gt;Windows Communication Foundation and Windows Workflow Foundation Integration in Depth&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;6/25/2008 10:00 AM&lt;SPAN style="COLOR: #1f497d; mso-themecolor: dark2"&gt; &lt;/SPAN&gt;PST&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Jesus Rodriguez&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR style="HEIGHT: 15pt; mso-yfti-irow: 5; mso-yfti-lastrow: yes"&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 414.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=553&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032380769&amp;amp;EventCategory=4&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT color=#0000ff size=3&gt;Windows Workflow Communication in Depth&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 153.05pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=204&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;6/26/2008 09:00 AM&lt;SPAN style="COLOR: #1f497d; mso-themecolor: dark2"&gt; &lt;/SPAN&gt;PST&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #f0f0f0; PADDING-LEFT: 5.4pt; BACKGROUND: #dbe5f1; PADDING-BOTTOM: 0cm; BORDER-LEFT: #f0f0f0; WIDTH: 94.5pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 15pt" vAlign=top noWrap width=126&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'"&gt;&lt;FONT size=3&gt;Matt Milner&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3069473" 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/SOA/default.aspx">SOA</category></item><item><title>Поддержка транзакций в WCF Oracle adapter</title><link>http://blogs.technet.com/stanko/archive/2008/05/08/oracle.aspx</link><pubDate>Thu, 08 May 2008 11:21:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3052095</guid><dc:creator>stas</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/stanko/comments/3052095.aspx</comments><wfw:commentRss>http://blogs.technet.com/stanko/commentrss.aspx?PostID=3052095</wfw:commentRss><description>&lt;P&gt;Недавно мне прислали вопрос о том, как обновить две таблицы в БД Oracle в одной транзакции, отправив два соответствующих сообщения из BizTalk через WCF Oracle адаптер. &lt;/P&gt;
&lt;P&gt;Казалось бы, интутитивно, заключение двух Send форм в Atomic transaction scope должно привести к желаемому результату. Однако, такие транзакции выполняются на уровне MessageBox.&lt;/P&gt;
&lt;P&gt;Как всегда, решение имеет несколько вариантов. Стандартные варианты в таких случаях - иметь хранимую процедуру, выполняющую обновление двух таблиц и вызывать ее через адаптер, либо воспользовать Expression формой, где через средства .NET выполнить обновление в транзакции.&lt;/P&gt;
&lt;P&gt;С новым же WCF Oracle адаптером, у вас появилась возможность поддержки транзакций для серии отдельных сообщений. По &lt;A href="http://blogs.msdn.com/adapters/archive/2007/10/24/enablebiztalklayeredchannel-property-in-oracledb-adapter.aspx" mce_href="http://blogs.msdn.com/adapters/archive/2007/10/24/enablebiztalklayeredchannel-property-in-oracledb-adapter.aspx"&gt;этой ссылке&lt;/A&gt; можно прочитать про эту возможность. Далее я опишу, как это сделать своими словами. &lt;/P&gt;
&lt;P&gt;Итак, у вас есть набор сообщений для Oracle, которые вы хотите отправить в единой транзакции. Первое, что нужно сделать это установить у таких сообщений следующие свойства:&lt;/P&gt;
&lt;LI&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties#SPID&lt;/LI&gt;
&lt;P&gt;Это стандартное свойство, которое устанавливается адаптером в идентификатор исходящего порта (в нашем случае Oracle порта). Все сообщения в транзакции должны иметь единое значение этого свойства. Т.е. все такие сообщения должны отправляться через единый исходящий порт (возможно с различными операциями на каждое действие). &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI&gt;http://schemas.microsoft.com/BizTalk/2003/system-properties#InterchangeID&lt;/LI&gt;
&lt;P&gt;InterchangeID так же стандартное свойство и оно позволяет отнести сообщения с единым значением InterchangeID к единой сессии передачи сообщений (например, при дебатчинге входящего сообщения, все получившиеся сообщения имеют одинаковое значение InterchangeID). Итак, вам придется установить это свойство в оркестровке для серии транзакционных сообщений в единое значение - это может быть просто сгенерированный Guid или взятый InterchangeID из входящего сообщения.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI&gt;http://Microsoft.LobServices.OracleDB/2007/03/OracleDBSendContextProperties#TransactionState&lt;/LI&gt;
&lt;P&gt;Третье свойство определено в сборке Microsoft.Adapters.OracleDB.BiztalkPropertySchema.dll, которая идет в поставке с BizTalk Adapter Pack (находится в папке bin, где установлен пакет). Добавьте эту сборку, как ресурс через административную консоль BizTalk (например, в стандартное приложение BizTalk Application 1). В ваш проект же добавьте на нее ссылку (через Add Reference).&lt;/P&gt;
&lt;P&gt;TransactionState - это очень важное свойство, т.к. оно регулирует действия над транзакцией, и может принимать следующие значения:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;BEGIN - сообщение, которое может быть либо данными или контрольным (об этом ниже) сообщением, иницирует транзакцию.&lt;/LI&gt;
&lt;LI&gt;REUSE - сообщение включается в транзакцию.&lt;/LI&gt;
&lt;LI&gt;COMMIT - контрольное сообщение подтверждает транзакцию.&lt;/LI&gt;
&lt;LI&gt;ABORT - контрольное сообщение откатывает транзакцию.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Контрольное сообщение имеет следующий вид: &amp;lt;Oracle_Transaction xmlns="http://Microsoft.LobServices.OracleDB/2007/03/Oracle_Transaction"&amp;gt;&amp;lt;/Oracle_Transaction&amp;gt;. Операция отправляющая контрольное сообщение в адаптер должна мэпиться на SOAP action "http://Microsoft.LobServices.OracleDB/2007/03/Oracle_Transaction".&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Схема контрольного сообщения (дабы не создавать его руками) находится в папке Schemas, где установлен BizTalk Adapter Pack.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Это все о свойствах. &lt;/P&gt;
&lt;P&gt;Сам WCF-custom адаптер с байндингом oracleDBBinding должен иметь свойство enableBizTalkCompatibilityMode установленным в true (по умолчанию, это так).&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Небольшой пример. Я получаю входящее сообщение, создаю два исходящих, каждое из которых обновляет различные таблицы Oracle и затем завершаю транзакцию.&lt;/P&gt;
&lt;P&gt;Моя оркестровка выглядит так:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/Oracle_9A95/Ora1_2.jpg" mce_href="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/Oracle_9A95/Ora1_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=244 alt=Ora1 src="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/Oracle_9A95/Ora1_thumb.jpg" width=220 border=0 mce_src="http://blogs.technet.com/blogfiles/stanko/WindowsLiveWriter/Oracle_9A95/Ora1_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;В форме MessageAssignment происходит самое интересное: я устанавливаю свойства всей серии Oracle сообщений:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;doc = new System.Xml.XmlDocument();&lt;BR&gt;doc.LoadXml("&amp;lt;ns0:Oracle_Transaction xmlns:ns0='http://Microsoft.LobServices.OracleDB/2007/03/Oracle_Transaction'&amp;gt;&amp;lt;/ns0:Oracle_Transaction&amp;gt;"); 
&lt;P&gt;mCommit = doc; 
&lt;P&gt;mInsertProduct(Microsoft.Adapters.OracleDB.BiztalkPropertySchema.TransactionState) = "BEGIN";&lt;BR&gt;mInsertProduct(BTS.InterchangeID) = mInbound(BTS.InterchangeID);&lt;BR&gt;mInsertPO(Microsoft.Adapters.OracleDB.BiztalkPropertySchema.TransactionState) = "REUSE";&lt;BR&gt;mInsertPO(BTS.InterchangeID) = mInbound(BTS.InterchangeID);&lt;BR&gt;mCommit(Microsoft.Adapters.OracleDB.BiztalkPropertySchema.TransactionState) = "COMMIT";&lt;BR&gt;mCommit(BTS.InterchangeID) = mInbound(BTS.InterchangeID); 
&lt;P&gt;Последовательность отправки сообщений: mInsertProduct, mInsertPO, mCommit. 
&lt;P&gt;Порт Oracle в консоли администратора имеет следующие настройки WCF-Custom для SOAP Action Header: 
&lt;P&gt;&amp;lt;BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Operation Name="InsertProduct" Action="http://Microsoft.LobServices.OracleDB/2007/03/SUPPLIER/Table/PRODUCT/Insert" /&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Operation Name="InsertPO" Action="http://Microsoft.LobServices.OracleDB/2007/03/SUPPLIER/Table/PURCHASEORDER/Insert" /&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;Operation Name="ControlTransaction" Action="http://Microsoft.LobServices.OracleDB/2007/03/Oracle_Transaction" /&amp;gt;&lt;BR&gt;&amp;lt;/BtsActionMapping&amp;gt; 
&lt;P&gt;Вот пожалуй и все. Теперь вставка в две разные таблицы будет производится в единой транзакции. 
&lt;P&gt;Стас&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3052095" 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></item><item><title>Безопасность WCF в вопросах и ответах</title><link>http://blogs.technet.com/stanko/archive/2008/04/28/wcf.aspx</link><pubDate>Mon, 28 Apr 2008 06:35:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3046119</guid><dc:creator>stas</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/stanko/comments/3046119.aspx</comments><wfw:commentRss>http://blogs.technet.com/stanko/commentrss.aspx?PostID=3046119</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=verdana,geneva&gt;На CodePlex&amp;nbsp;вышел &lt;/FONT&gt;&lt;A class="" href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=Questions%20and%20Answers&amp;amp;referringTitle=Home" mce_href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=Questions%20and%20Answers&amp;amp;referringTitle=Home"&gt;&lt;FONT face=verdana,geneva&gt;большой список ответов&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=verdana,geneva&gt; на вопросы,&amp;nbsp;связанных с моделями и способами обеспечения безопасности в WCF.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=verdana,geneva&gt;Сам список был сформирован&amp;nbsp;исходя из&amp;nbsp;реальных сценариев&amp;nbsp;применения WCF&amp;nbsp;у&amp;nbsp;клиентов, запросов в техническую поддержку и часто возникающих&amp;nbsp;вопросах на форумах.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3046119" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/stanko/archive/tags/WCF/default.aspx">WCF</category></item></channel></rss>