<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:cruaute</id>
  <title>Oleg Kleiman</title>
  <subtitle>Oleg Kleiman</subtitle>
  <author>
    <email>okey@netvision.net.il</email>
    <name>Oleg Kleiman</name>
  </author>
  <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom"/>
  <updated>2008-08-26T18:12:41Z</updated>
  <lj:journal username="cruaute" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://cruaute.livejournal.com/data/atom" title="Oleg Kleiman"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:32742</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/32742.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=32742"/>
    <title>Две Олимпиады</title>
    <published>2008-08-23T19:54:41Z</published>
    <updated>2008-08-23T20:40:55Z</updated>
    <content type="html">&amp;nbsp;Виндсёрфер Шахар Цубери из Эйлата завоевал бронзовую медаль на Олимпиаде в Пекине. Президент и премьер-министр Израиля не замедлили позвонить герою, чтобы поздравить его с национальным достижением. "Я лично следил за всеми твоими гонками", - любезно сказал Ольмерт.&lt;br /&gt;&amp;nbsp;А две недели назад в Мадриде проходила &lt;a href="http://www.imo-2008.es/index.html"&gt;другая&lt;/a&gt; олимпиада в виде спорта, который называется математика. Президент не сопровождал национальную сборную и премьер-министр не следил за их выступлением. Он никого не поздравил, хотя количество медалей, доставшихся Израилю, там было значительно больше. И в дисциплинах, наверное, не менее важных, чем виндсёрфинг.&amp;nbsp;&lt;br /&gt;&amp;nbsp;У них нет национального центра подготовки и после возвращения домой им вряд ли предложат контракты в рекламных агенствах "Пумы" и "Адидаса", но тем не менее, они привезли следующее : Дан Кармон - золотую медаль (35 баллов из 42 возможных), Офир Городецки - серебрянную медаль (24 из 42), Омри Бен-Элиезер (20 из 42) и Олег Злиденко (19 из 42)&amp;nbsp;- бронзовые медали. Еще двое - Оhад Нир и Лир Баhак - получили почетные грамоты. Я почему-то уверен, что чем бы ни закончилась нынешняя каденция кабинета министров, никто и во время следующей не изменит мнения о том, какой же вид спорта являтся приоритетным в Израиле, сколько требует его финансирование и кому нести бело-голубой флаг символом национальний гордости и самоуважения на торжественном параде отрытия следующей Олимпиады.&lt;br /&gt;P.S. Вопросы математической олимпиады можно найти &lt;a href="http://www.imo-2008.es/examenes/rus.pdf"&gt;здесь&lt;/a&gt;.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:32396</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/32396.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=32396"/>
    <title>BizTalk Q&amp;A</title>
    <published>2008-08-09T23:18:32Z</published>
    <updated>2008-08-10T09:04:28Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span&gt;&lt;strong&gt;Q.&lt;/strong&gt; What are two main types of subscriptions? What the difference between them?&lt;/span&gt; &lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span&gt;&lt;strong&gt;A.&lt;/strong&gt; There are two types of subscriptions in BizTalk server: activate and instance. The activate subscription&amp;nbsp;initializes the service for the first time, the instance subscription picks up one of the services&amp;nbsp;which already&amp;nbsp;has been initialized according to its instance ID. Instance subscriptions are usually served for correlations.&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Subscriber might be orchestration or/and send port and two administrative operations&amp;nbsp;for subscriber directly apply on its subscription: Enlist and Start. Enlist operation actually creates the subscription but leaves it in "stopped" state until "Start" operation is performed. &lt;/span&gt;&lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;(The attempt to use stopped subscriber causes the engine to produce the error 0xC0C01B4D (Subscribing Service is Stopped) and to suspend the service, that initialized the invocation.)&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;Subscription created for static send port consists of single predicate based on BTS.SPTransportID property that uniquely&amp;nbsp;generated for this send port. (*)&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;In contrast to static send port, dynamic send port creates as many subscriptions as a number of registered transmit transports (send adapters)&amp;nbsp;known to engine. A single dynamic send port produces, for example, 14 subscriptions, if the system has 14 registered send adapters, each of them having the following structure&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;BTS.OutboungTransportType&lt;/span&gt;&lt;/i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;= "File"/"MSMQ"/"SMTP"/"FTP"/"HTTP"/"SOAP" etc.&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;BTS.SPID&lt;/span&gt;&lt;/i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt; = &amp;lt;GUID&amp;gt;&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;BTS.OutboungTransportLocation&lt;/span&gt;&lt;/i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt; &lt;/span&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;exists&lt;/span&gt;&lt;/i&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;Subscriptions for direct binding models use only predicates based on &lt;i&gt;BTS.MessagesType&lt;/i&gt; property, allowing the high degree of freedom to process messages through such subscription.&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&amp;nbsp;Partner port subscriptions are based on evaluating three properties which promoted by orchestration: &lt;i&gt;BTS.PartnerPort&lt;/i&gt;, &lt;i&gt;BTS.PartnerService&lt;/i&gt; and &lt;i&gt;BTS.Operation&lt;/i&gt;.&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;Subscriptions have the notion of priority. As for BizTalk 2006 R2, subscriptions for orchestrations always have priority 7 when the EPM-subscriptions have lower priority – 5.&lt;/span&gt;&amp;nbsp;&lt;br /&gt;Existing subscriptions can be enumerated with a help of &lt;a target="_blank" rel="nofollow" href="http://msdn.microsoft.com/en-us/library/microsoft.biztalk.operations.subscription.aspx"&gt;&lt;font color="#4563b9"&gt;Subscription&lt;/font&gt;&lt;/a&gt; class. &lt;br /&gt;&lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;-----------------&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; LINE-HEIGHT: normal; unicode-bidi: embed; TEXT-ALIGN: left"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;* - This property is vitally needed for the orchestration to know, how to deal with messages leaving it for 'late binding'. After orchestration is deployed with 'late binding' option, it has no idea about how to connect the messages from 'uses' port (logical send ports) to EPM ports. When you specify the actual send port from binding tab on Orchestration Properties dialog, its SPTransportID is saved, letting to XLANG/S to know that this GUID will be appended and promoted for each message going through logical send port. Note, that no additional subscription is created for logical send port in this case.&lt;/span&gt; &lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;p style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;"&gt;&lt;strong&gt;Q.&lt;/strong&gt; What is the Message Agent? &lt;/span&gt;&lt;/p&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p style="MARGIN: 0cm 0cm 0pt"&gt;&lt;span style="FONT-SIZE: 8.5pt; COLOR: #333333; FONT-FAMILY: &amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;"&gt;&lt;strong&gt;A.&lt;/strong&gt; &lt;/span&gt;Message Agent is the BizTalk sub-system wrapping-out the operations with MessageBox database. In particular, it is responsible for publishing/subscribing mechanism implementation. No&amp;nbsp;component of BizTalk (including adapters) talks directly to MessageBox's objects: tables or stored procedures, the MessageAgent exposes its functionality to all other sub-systems of BizTalk Server.&lt;/p&gt;&lt;/div&gt;&lt;p style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:32059</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/32059.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=32059"/>
    <title>Срочно нуждается в переводе</title>
    <published>2008-07-05T23:52:59Z</published>
    <updated>2008-08-04T22:59:58Z</updated>
    <content type="html">&lt;strong&gt;Goodnight Moon&lt;/strong&gt; (eng.)&amp;nbsp; by &lt;a title="Shivaree (band)" href="http://en.wikipedia.org/wiki/Shivaree_%28band%29"&gt;Shivaree&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;There's a nail in the door &lt;br /&gt;And there's glass on the lawn &lt;br /&gt;Tacks on the floor &lt;br /&gt;And the TV is on &lt;br /&gt;And I always sleep with my guns when you're gone &lt;br /&gt;&lt;br /&gt;There's a blade by the bed &lt;br /&gt;And a phone in my hand &lt;br /&gt;A dog on the floor &lt;br /&gt;And some cash on the nightstand &lt;br /&gt;When I'm all alone the dreaming stops &lt;br /&gt;And I just can't stand &lt;br /&gt;&lt;br /&gt;What should I do I'm just a little baby &lt;br /&gt;What if the lights go out &lt;br /&gt;And maybe and then the wind just starts to moan &lt;br /&gt;Outside the door he followed me home &lt;br /&gt;&lt;br /&gt;So goodnight moon &lt;br /&gt;I want the sun &lt;br /&gt;If it's not here soon &lt;br /&gt;I might be done &lt;br /&gt;No it won?t be too soon 'til I say goodnight moon &lt;br /&gt;&lt;br /&gt;There's a shark in the pool &lt;br /&gt;And a witch in the tree &lt;br /&gt;A crazy old neighbor and he's been watching me &lt;br /&gt;And there's footsteps loud and strong coming down the hall &lt;br /&gt;Something's under the bed &lt;br /&gt;Now it's out in the hedge &lt;br /&gt;There's a big black crow sitting on my window ledge &lt;br /&gt;And I hear something scratching through the wall &lt;br /&gt;&lt;br /&gt;What should I do I'm just a little baby &lt;br /&gt;What if the lights go out &lt;br /&gt;And maybe and then the wind just starts to moan &lt;br /&gt;Outside the door he followed me home &lt;br /&gt;So goodnight moon &lt;br /&gt;I want the sun &lt;br /&gt;If it's not here soon &lt;br /&gt;I might be done &lt;br /&gt;No it won't be too soon 'til I say goodnight moon &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Marcha dos Pescadores&lt;/strong&gt; (por. [bra]) -&amp;nbsp;сл., видимо, народные, муз. Dorival Caymmi.&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Minha jangada vai sair p’ro mar&lt;br /&gt;[минь&lt;strong&gt;я&lt;/strong&gt; жанг&lt;strong&gt;а&lt;/strong&gt;да вай са&lt;strong&gt;и&lt;/strong&gt; пру м&lt;strong&gt;а&lt;/strong&gt;] &lt;em&gt;(моя&amp;nbsp;&amp;nbsp;&lt;a href="http://ru.wikipedia.org/wiki/%D0%96%D0%B0%D0%BD%D0%B3%D0%B0%D0%B4%D0%B0"&gt;жангада&lt;/a&gt;&amp;nbsp;выходит в море)&lt;br /&gt;&lt;/em&gt;Vou trabalhar, meu bem-querer&lt;br /&gt;[Во трабаль&lt;strong&gt;я&lt;/strong&gt;р, мэ б&lt;strong&gt;е&lt;/strong&gt;м кер&lt;strong&gt;е&lt;/strong&gt;] &lt;em&gt;(буду работать на свое благо)&lt;br /&gt;&lt;/em&gt;Se Deus quiser quando eu voltar do mar&lt;br /&gt;[Си д&lt;strong&gt;е&lt;/strong&gt;уш киз&lt;strong&gt;е&lt;/strong&gt; кванд&lt;strong&gt;'&lt;/strong&gt; эу воут&lt;strong&gt;а&lt;/strong&gt; ду ма] &lt;em&gt;(Бог даст, когда вернусь из моря)&lt;/em&gt;&lt;br /&gt;um peixe bom eu vou trazer&lt;br /&gt;[Ум п&lt;strong&gt;е&lt;/strong&gt;йши бом&amp;nbsp;э ву траз&lt;strong&gt;э&lt;/strong&gt;] &lt;em&gt;(привезу хорошую рыбу&amp;nbsp;[ peixe - пеше])&lt;/em&gt;&lt;br /&gt;Meus companheiros também vão voltar&lt;br /&gt;[Меуш компань&lt;strong&gt;е&lt;/strong&gt;руш т&lt;strong&gt;а&lt;/strong&gt;мбьем ва воут&lt;strong&gt;а&lt;/strong&gt;] &lt;em&gt;(мои друзья тоже вернутся)&lt;br /&gt;&lt;/em&gt;E a Deus do céu vamos agradecer&amp;nbsp;&lt;br /&gt;[Йа д&lt;strong&gt;е&lt;/strong&gt;уш ду с&lt;strong&gt;е&lt;/strong&gt;у вам&lt;strong&gt;уз&lt;/strong&gt; аградэс&lt;strong&gt;э&lt;/strong&gt;] &lt;em&gt;(и Небесномого Бога мы возблагодарим)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;A estrela d'Alva me acompanha&lt;br /&gt;(меня сопровождает 'путеводная' звезда )&lt;br /&gt;iluminando o meu caminho&lt;br /&gt;(освещая мой путь)&lt;br /&gt;Eu sei que nunca estou sozinho&lt;br /&gt;(я знаю, что я не один)&lt;br /&gt;pois tem alguém que esta pensando em mim.&lt;br /&gt;(кто-то думает обо мне)&lt;br /&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:31826</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/31826.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=31826"/>
    <title>WCF vs. BizTalk EPM vs. WebServices</title>
    <published>2008-06-28T16:10:42Z</published>
    <updated>2008-06-29T00:12:57Z</updated>
    <category term="biztalk"/>
    <content type="html">Аналогия между WCF endpoints и Receive/Send ports в BizTak'e настолько разительна, что я не удивлюсь, если следующая его версия (после &lt;a href="http://blogs.msdn.com/chabrook/archive/2008/05/02/biztalk-r3-announced.aspx"&gt;R3&lt;/a&gt;) полностью заменит BizTalk EPM на WCF WAS.&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Создание WCF Service в этой аналогии сопоставимо с созданием orchestration.&lt;br /&gt;&lt;strong&gt;А&lt;/strong&gt;(ddress). Выбор адреса, через который будет доступен сервис, зависит в обоих случаях только от требований клиентского приложения. Как одна и та же оркестрация может быть доступна через разные порты, так и WCF сервис может быть доступен через несколько независимых endpoints.Создание как портов, так и endpoints совершенно не зависит от самого сервиса.&amp;nbsp;&lt;br /&gt;&lt;strong&gt;B&lt;/strong&gt;(inding). Привязка (binding) сервиса к адресу дается в BizTalk настройкой портов, а в WCF - &lt;a href="http://msdn.microsoft.com/en-us/library/ms732009.aspx"&gt;настраиванием&lt;/a&gt; endpoints. Каждый endpoint/port имеет в свою очередь независимо-настраиваемые свойства, кот. в WCF называются behaviors. Аналог в - свойства порта, как, например, tracking, authentication etc..&lt;br /&gt;&lt;strong&gt;C&lt;/strong&gt;(ontract). Сервисы&amp;nbsp; BizTalk ориентированы на сообщения, кот. имеют строгую структуру (XSD schemas). Сервисы WCF вместо XSD требуют строго структурированных контрактов/интерфейсов, т.е. описания данных в &lt;strike&gt;более свободной&lt;/strike&gt; другой форме. Не забудем, однако, что сообщения BizTalk могут быть, вообще говоря, произвольными .Net-классами.&lt;br /&gt;&lt;br /&gt;В то время как для порты BizTalk могут исполняться только внутри Windows service, известного как BizTalk host instance, существует несколько моделей хостинга для WCF сервисов. Они могут исполнятся 1) в специально созданном для этой цели приложении (т.наз. self-hosting model), 2) в IIS (конечно, речь идет о IIS 7) и 3) в WAS. На этой картинке можно видеть WCF сервис, &lt;a href="http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe/"&gt;настроенный&lt;/a&gt; в IIS7 на поддержку и http, и tcp, и named pipes, и msmq.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img alt="IIS7 hosting WCF service" src="http://img1.liveinternet.ru/images/attach/b/3/28/66/28066618_IIS_WCF.jpg" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;По аналогии с тем, как поступающие сообщения записываются BizTalk адаптером в очередь сообщений для своего host'a, архитектура WAS использует для этих целей очередь того IIS Application Pool, который настроен исполнять WCF сервис. А именно, один из &lt;em&gt;protocol listeners&lt;/em&gt; (для http это http.sys драйвер) по мере поступления сообщений записывает их в очередь Application Pool, далее задачей &lt;em&gt;listener adapter&lt;/em&gt; является извлечение сообщений из этой очереди для передачи protocol handlers. Последние исполняются внутри WAS, который отвечает за активацию &lt;em&gt;protocol handlers&lt;/em&gt;, их конфигурацию и проч. Можно сказать другими словами, что&amp;nbsp;используя WAS, IIS больше не зависит от http для активации своих внутренних процессов (т.е. в конечном итоге - своих applications, которые и являются WCF сервисами).&lt;br /&gt;&lt;br /&gt;&lt;p align="left"&gt;Обычные Web-Services не вписываются в эту систему, но из-за их широкого распространения разработчики привыкли считать , что&amp;nbsp;&lt;br /&gt;&amp;nbsp; 1. разделение интерфейса и транспортного протокола является скорее теоретической выдумкой (что, право сказать, не далеко было от истины в года расцвета COM) и&amp;nbsp;&lt;br /&gt;&amp;nbsp; 2.&amp;nbsp; легче создать клиентское приложение, поддерживающее SOAP поверх HTTP (особенно с повсеместной поддержкой&amp;nbsp; Ajax), чем заставить сервис поддержать нужное количество клиентских протоколов.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:31587</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/31587.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=31587"/>
    <title>История народов. Гунны.</title>
    <published>2008-06-07T15:39:57Z</published>
    <updated>2008-06-07T21:47:39Z</updated>
    <content type="html">&amp;nbsp; Собирательный труд имеет по сравнению с производительным единственный недостаток - недостаточность территории. &lt;a name="cutid1"&gt;&lt;/a&gt;В выращенном меньше белков и калорий, чем в найденном и добытом на охоте; животноводство также приятнее, чем возделывание, потому, что оно естественнее. Люди занялись сельским хозяйством, однако, совсем не для того, чтобы повысить свой уровень жизни, интенсивное земледелие было единственным способом решить проблему неограниченной рождаемости на ограниченной территории. Но не для гуннов.&lt;br /&gt;&amp;nbsp; Они произошли, видимо, из тех районов Гоби, где выращивать просто было нечего, а климат, который из всех факторов влияния на характер народа, является самым решающим, способствовал даже не столько преодолению трудностей, сколько подавлению собственного сознания, которое исключительно мешало этим предкам монголов сохранить за собой свойства человеческого рода.&lt;br /&gt;&amp;nbsp; Слава богу, что мы занимаемся антропологией, а не историей, потому как картина социального быта этого племени способна отбить у многих всяческий интерес к дальнейшим изысканиям : &amp;laquo;&lt;span style="font-style: italic;"&gt;Могущие владеть луком все поступают в латную&amp;nbsp; конницу... каждый занимается воинскими упражнениями, чтобы производить набеги... Сильные едят жирное и лучшее; устаревшие питаются остатками после них. Молодых и крепких уважают, устаревших и слабых мало почитают... Обыкновенно называют друг друга именами; прозваний и проименований не имеют&lt;/span&gt;&amp;raquo; (Кстати, автор этого наблюдения - Н.Я.Бичурин&amp;nbsp; - был главой русской духовной миссии в Пекине, называясь в то время о.Иакинфом, и здесь мы называем гуннов монголами, полагаясь на его авторитетное мнение, кот., однако, расходится с современным взглядом на вещи). &lt;br /&gt;&amp;nbsp;Впрочем, сказанное относится не к самим гуннам, а к их предкам - народу ху (современные им китайцы, впрочем, не вдаваясь в общинные тонкости, называли всех своих северных соседей "бэй-ди" - примерно "северные варвары"), который, установив оптимальные для степей сроки беременности и уровень рождаемости (что является, видимо, основной предпосылкой для перехода от племени к нации - см., например, современный Китай), к XIII в. до н.э. перебрался через Гоби, открыв Сибирь.&lt;br /&gt;&amp;nbsp;Значение этого открытия трудно переоценить. Оно сравнимо с генетическими открытиями Лысенко о возможности наследования приобретенных отклонений&amp;nbsp; или, по меньшей мере, с установлением первого государства шариата. Потому как, перейдя Гоби, ху обнаружили перед собой неисчерпаемые возможности оставаться самими собой : бескрайние просторы от Байкала меньше всего заставляют задуматься о необходимости сеять и жать. &lt;br /&gt;&amp;nbsp; Волы лучше оленей как тягловая сила, но мясо оленей вкуснее - вот та истина, которая двигает историю от гуннов к кыргызам. Первые перевезли гуннов через пустыню, съедобные качества вторых до сих пор вдохновляют &lt;a target="_blank" href="http://www.lib.ru/PROZA/AJTMATOW/parohod.txt"&gt;кыргызскую литературу&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;Тысячелетняя история становления гуннов до III в. до н.э. мало исследована. Не утруждая себя письменностью, они больше тяготели к нефриту для сохранения своих ценностей. Что же касается их устного, то тут я должен заметить, что согласно китайским пословицам, язык вообще теряет смысл как только получает выражение в иероглифах. (sic! - еще одна китайская мудрость). Удивительно ли, поэтому, что единственным словом, уцелевшим до сегодняшнего дня из гуннского есть слово &amp;laquo;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;a href="http://www.gramota.ru/slovari/dic/?word=%F1%E0%E3%E0%E9%E4%E0%EA&amp;amp;all=x" target="_blank"&gt;сагайдак&lt;/a&gt;&amp;raquo;. Что касается тюркских языков, то только финны могут оценить всю ценность этого подарка.&lt;br /&gt;&amp;nbsp; Другой подарочек оставили гунны китайцам, первый император которых, Цинь Ши Хуан(*), для теплого приема гуннов с размахом построил Великую Китайскую стену. Бесполезность сооружения сравнима только с его длиной (ок. 6 тыс. км.), чего, кстати, нельзя сказать о стене Шарона - здесь коэффициент значительно больше в виду электронных систем предупреждения. &lt;br /&gt;&amp;nbsp; Возможно только это и заставило гуннов самоорганизоваться. Если бы не система родового управления в армии, то они, безусловно, ушли бы еще дальше, а государственный строй этих кочевников вполне отвечал традициям собирательного труда их предков : всеобщая воинская повинность, вознаграждение воинов результатами своего труда, взгляд на территорию как на основу государства, рабовладение пленными. Веселая жизнь гуннов с тех пор неоднократно пыталась возродиться : чем запорожские казаки хуже? Кстати, и атаманы сечи, и гуннские шаньюи были родными батьками всего соответствующего культурного пласта. &lt;br /&gt;&amp;nbsp; Потомственные гунны, как и нормальные казаки или граждане Абу-Даби, не знали, что такое налог : благо кочевое право тем успешнее прививается соседям, чем доблестнее воины и/или благочестивее подданные.&lt;br /&gt;&amp;nbsp;Итак, к началу нашей э. гунны основались в Южной Сибире и Приуралье, где, постепенно смешиваясь с местным населением, они и создали тот тип людей, кот. является предметом нашего исследования. &lt;br /&gt;&amp;nbsp; О местном населении надо сказать особо. Гунны частью ассимилировали, а частью уничтожили финно-угров, кот. с тех пор в большинстве живут в Европе : финны, венгры, эстонцы имеют общий праязык и общих родителей. С появлением гуннов эти родители массово тронулись на Запад явлением, известным в истории как Великое переселение народов. Гунны подвинули славян, те - готов и вместе с лангобардами и вандалами из Германии все они ввалились в обе оставшиеся Римские империи. (Император ее восточной части - Феодосий II(**) был более проницателен в том, с кем имеет дело : говорят, что на оборону Константинополя в 434 г. он выставил львов, заключив, что людям не пристало иметь дело с теми кочевниками.) Пока вандалы и прочие германцы жгли Рим, гунны дошли до Галлии, а остготы заселили тогда еще не Турецкий полуостров. &lt;br /&gt;&amp;nbsp; К V в. н.э., периоду наибольшего распространения этой нечисти на земном шаре, гунны имели царя (видимо, первого и единственного) - Атиллу(***). И &lt;a target="_blank" href="http://bryusov.lit-info.ru/bryusov/stihi/1898-1908/stih-91.htm"&gt;В.Брюсова&lt;/a&gt;, и &lt;a href="http://www.litera.ru/stixiya/authors/ivanovV/vam-praschurov-derevya.html" target="_blank"&gt;Вяч. Иванова&lt;/a&gt; эта личность сподвигла на личные стихотворные обращения, а Е.Замятина - на одноименную пьесу и &lt;a href="http://az.lib.ru/z/zamjatin_e_i/text_0030.shtml"&gt;подготовительную повесть&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt; Расселение гуннов от сегодняшней Монголии до Европы практически не имело национальной окраски. Видимо, они были лишены в то время национального самосознания как совершенно неестественного для дикарей, еще не создавших ничего, на чем оно могло бы держаться. К тем примерам человеческой цивилизации, которые им встречались по дороге, они относились примерно как обезьяна к телефону, без лишних церемоний. Я совершенно уверен, что они не сознавали себя народом ни в каком смысле, но организованным стадом, которому для того, чтобы сохраниться, требуется минимальный набор коллективных привычек и навыков. Это животное чутье силы и страха оказалось достаточным для создания общих корней огромной группы людей, у истоков которой стояли гунны, но впитавшей в себя ирано-язычные, алтайские, сибирские и северо-китайские племена, известные миру по сегодняшний день под названием &lt;b&gt;тюрки&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Временем рождения этого народа можно считать время распада империи Атиллы, после которого гунны растворились в мировой истории, оставив после себя безличь прото-тюрков : узбеков, татаров, туркменов, турков, азербайджанцев, огузов и проч. и проч. У каждого из них своя, растянувшаяся на тысячелетия, история; со своими халифатами, каганатами, батыями, ханами и базиядами. Но одновременно это же и история упорного сопротивления всему, что эта нечисть оставила после себя в мире; история народов, которые столетиями выбиваются из своих корней навстречу человеческим основам, заложенным в каждом из нас.&lt;br&gt;&lt;br /&gt;Путь этот труден (©, Pulp Fiction), но, как известно, настоящий туркмен не ищет прямых путей. Он радуется барашсыслыку как христианин в Пасху. Он вступает в брак с небесной девой, отчего у него рождаются дети, перед которыми он исполнен &lt;a href="http://www.ruhnama.info/ruhnama-ru/htm/eneata-borjy.htm" target="_blank"&gt;обязанностями&lt;/a&gt;. &lt;a href="http://www.ruhnama.info/ruhnama-ru/htm/eyyam.htm" target="_blank"&gt;Читайте&lt;/a&gt;, &lt;a href="http://www.ruhnama.info/ruhnama-ru/kitap-htm/s207.htm" target="_blank"&gt;читайте&lt;/a&gt; ссылки, их автор - не &lt;a href="http://absurdopedia.wikia.com/wiki/%D0%A2%D1%83%D1%80%D0%BA%D0%BC%D0%B5%D0%BD%D0%B1%D0%B0%D1%88%D0%B8" target="_blank"&gt;Супермурат Туркменбаши&lt;/a&gt;, это сам Атилла, только профиль(****) у него золотой, а не нефритовый. &lt;br /&gt;&lt;p&gt;---------&lt;/p&gt;&lt;p&gt;&lt;br /&gt;* - он же Цинь Ши Хуан Ди - правил с 221 г. по 210 г. н.э. Полководец, а в последние 30 лет и гончар, насколько позволяет судить его &lt;a href="http://www.world-mysteries.com/apeldoorn/Xian_Terracotta_army1_gdj.jpg" target="_blank"&gt;армия&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;** - Феодосий II (401 - 450 г.г.) не отделался львами, и в течение всего своего царствования  платил гуннам дань, кот. за эти годы выросла с 350 до 6000 золотых фунтов. (Город Феодосия в Крыму не имеет к нему никакого отношения, кроме греческой основы своего названия.) &amp;lt;/p&amp;gt;&lt;br&gt;&lt;br /&gt;*** - Хотя нам известно имя еще одного их предводителя, Баламбера, под чьим руководством эта саранча во 2-й половине IV-го века н.э. расселилась по всему Причерноморью, от Дона до Дуная.&lt;br&gt;&lt;br /&gt;**** - "Хочешь построить государство – зови туркмена". Сапармурат Туркменбаши Великий. "Рухнама"&lt;br /&gt;&lt;br /&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:31263</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/31263.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=31263"/>
    <title>Save BizUnit for QA</title>
    <published>2008-05-19T21:20:53Z</published>
    <updated>2008-05-25T00:26:35Z</updated>
    <category term="biztalk"/>
    <content type="html">&amp;nbsp;Пока &lt;a href="http://www.codeplex.com/bizunit" target="_blank"&gt;&lt;font color="#4563b9"&gt;BizUnit&lt;/font&gt;&lt;/a&gt; используется программистами, их не смущает &lt;a name="cutid1"&gt;&lt;/a&gt; ни тот факт, что TestSteps&amp;nbsp;для этого framework должны быть написаны на XML, ни тот, что для их запуска нужно откомпилироварь т.наз. boilerplate code. Тем более программисту не может помещать дюжина параметров при создании таких TestStep&amp;nbsp;как WebService Invoke : SOAP-Action, WS Namespace etc. - естественно ожидать от программиста, что составление таких сценариев не составит для него большого труда. &lt;p&gt;С другой стороны, когда BizUnit пытаются использовать как средство QA, эти же свойства framework становятся непреодолимой преградой для тех, кто не знаком с кодированием. Даже если прилежный сотрудник QA освоит XML-формат сценариев, то уж компилировать boilerplate code ему просто не на чем : не устанавливать же VS на каждой машине QA?..&lt;/p&gt;&lt;p&gt;Может быть поэтому, а может быть в силу разделения труда между производством (программированием) и техническим контролем (QA), BizUnit применяется только программистами, да и то так, как бог на душу положит. Методические проверки ведь все равно остаются за QA; например, &lt;a href="http://www.codeplex.com/BiztalkOrcProfiler" target="_blank"&gt;&lt;font color="#4563b9"&gt;code coverage&lt;/font&gt;&lt;/a&gt; это разве не методология? &lt;/p&gt;&lt;p&gt;В общем, картина довольно грустная : BizUnit сам по себе и QA сам по себе.&lt;/p&gt;&lt;p&gt;Прежде чем пытать решить эту проблему, неплохо было бы посмотреть по сторонам с тем, чтобы узнать, кого еще она беспокоит и кто уже пробовал думать иначе, чем Kevin B Smith. Начать с того, что некоторые пытались просто облегчить процесс создания TestSteps, генерируя их XML из UI. К сожалению, автор BizUnit не предусмотрел настоящей metadata для steps, поэтому, &lt;a href="http://www.codeplex.com/bud" target="_blank"&gt;&lt;font color="#4563b9"&gt;BizUnit Designer&lt;/font&gt;&lt;/a&gt;, например, вынужден довольствоваться "документацией" (я все-таки надеюсь, что под "документацией" они имеют в виду комментарии в коде самого BizUnit). &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeplex.com/BooUnit" target="_blank"&gt;&lt;font color="#4563b9"&gt;booUnit&lt;/font&gt;&lt;/a&gt; пошел значительно дальше, но, во-первых, сам &lt;a href="http://boo.codehaus.org/" target="_blank"&gt;&lt;font color="#4563b9"&gt;boo&lt;/font&gt;&lt;/a&gt; знаком исключительно энтузиастам и писать скрипты на нем, возможно, и легче, чем вникать в XML-формат BizUnit, но я не представляю, чтобы кто-то взялся изучать новый язык программирования только для того, чтобы изложить на нем пару десятков тестов для BizTalk.&lt;/p&gt;&lt;p&gt;Собственно на этом обзор рынка и заканчивается, оставляя впечатление, что либо BizUnit не принимают всерьез, либо наоборот - настолько принимают, что боятся слово поперек сказать. &lt;/p&gt;&lt;p&gt;Начнем с сериализации. Даже если реализовать Step-классы с необходимыми properties для XML-сериализации, это не избавит от необходимости в исполнении boilerplate-code, а только разломает существующий BizUnit framework. Представляется, что это слишком догорая цена для возможности автоматической генерации test cases. Поэтому просится &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.markup.xamlwriter.save.aspx" target="_blank"&gt;сериализовать&lt;/a&gt; Step-классы с необходимо добавленными properties в XAML.&lt;/p&gt;
&lt;p&gt;
Что это даст? После сериализации полученный XAML можно скомпилировать в полноценный assembly, и если добавить к откомпилированным классам и методам атрибуты NUnit (&lt;a href="http://www.nunit.org/index.php?p=testFixture&amp;amp;r=2.2.10" target="_blank"&gt;TestFixture&lt;/a&gt; к классам и &lt;a href="http://www.nunit.org/index.php?p=test&amp;amp;r=2.2.10" target="_blank"&gt;Test&lt;/a&gt; к методам),- получится загружаемый в NUnit модуль. Мало того, если откомпилировать сериализованный XAML в исполняемый assembly, не понадобится и NUnit. Очевидным недостатком такого подхода является то, что нужно по сути выбросить всю существующую реализацию BizUnit и переписать под XAML все уже созданные для него Step-классы. Наградой за приложенные усилия будет возможность создавать тесты автоматически, без какого-либо участия программиста в написании кода для теста. Другими словами, XAML позволит превратить BizUnit в настоящий инструмент QA.&lt;/p&gt;
&lt;p&gt;Итак, попробуем. Сериализация в XAML не представляет особых трудностей, поэтому не стоит на ней останавливаться, займемся компиляцией XAML.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/mswanson/archive/2006/11/21/swf2xaml-a-tool-to-convert-flash-files-to-xaml.aspx" target="_blank&amp;quot;"&gt;Добавить&lt;/a&gt;&lt;/p&gt;
&amp;nbsp;
&lt;p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:31114</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/31114.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=31114"/>
    <title>MCST Part V. BAM</title>
    <published>2008-04-30T22:08:24Z</published>
    <updated>2008-05-03T23:16:18Z</updated>
    <content type="html">&lt;strong&gt;Activity creation and Deployment.&lt;/strong&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;1. Первый шаг предназначен для бизнес-аналитиков и состоит в использовании Excel Add-In. &amp;nbsp;В Excel 2007 он расположен под закладкой "Add-Ins"&amp;nbsp;: &lt;img alt="BAM Excel 2007 Add-In" src="http://img0.liveinternet.ru/images/attach/b/2/23/962/23962180_1209594583_BAM_Excel2007_AddIn.jpg" /&gt;&lt;br /&gt;Обратим внимание на то, что этот Add-In устанавливается независимо от остальной инфраструктуры BizTalk на любой компьютер бизнес-аналитика, оборудованный единственно что Office. Его использование состоит в определении составляющих&amp;nbsp;единиц исполнения - Activities&amp;nbsp;и CheckPoints (кот. в UI называются 'items') -естественно, в бизнес-понимании этого слова. Например, хорошим&amp;nbsp;Activity будет, скажем, время старта оркестрации.&amp;nbsp; Определение Activities требует понимания бизнес-процесса, во всяком случае его основных показателей, и исполняется Wizard'ом, по завершении которого бизнес-аналитику предлагается сохранить результаты своей деятельности в XML-файле. Вот, для примера, фрагмент такого файла :&lt;br /&gt;&lt;br /&gt;&lt;img alt="BAM Definitions XML" src="http://img0.liveinternet.ru/images/attach/b/2/24/116/24116080_1209803903_BAMDefinitions.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Этот файл, известный как BAM Definitions, передается разработчику или лучше - администратору для того чтобы тот "опубликовал" его содержимое. Под этим понимают автоматический ( с помощью&amp;nbsp;bm.exe )&amp;nbsp;процесс создания таблиц, views и stored procedures в специально приготовленной для этого базе данных.&lt;br /&gt;&lt;br /&gt;База эта ,по умолчанию, называется BAMPrimaryImport (BTI).&lt;br /&gt;&lt;br /&gt;&lt;img alt="Overview" src="http://msdn.microsoft.com/en-us/library/Aa995542.74b758b0-68c7-4cfa-9496-20952fb2517c(en-us,MSDN.10).gif" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;font style="BACKGROUND-COLOR: #d2d2d2"&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;Instrumenting Orchestrations, Pipelines and Ports.&lt;br /&gt;&lt;/strong&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&amp;nbsp;Как видно из предыдущего рисунка, любое приложение, может использовать специально разработанный API &amp;nbsp;для дальнейшей работы с BAM. Прежде всего этот API предназначен для приложений BizTalk, но ничто не мешает и другим приложениям .NET обращаться к нему, причем единственное, что для этого требуется - это присутствие на вызывающей машине файла Microsoft.BizTalk.Bam.EventObservation.dll без никаких других компонентов BizTalk Server 2006 (В BizTalk 2004 это не так!). &lt;a href="http://support.microsoft.com/kb/910296/en-us"&gt;Здесь&lt;/a&gt; подчеркивается, что это единственный поддерживаемый способ обращения к BAM, т.е. прямое обращение к созданным в базе объектам настоятельно не рекомендуется.&lt;br /&gt;&amp;nbsp;В рамках этого подхода, существует два способа обратиться к BAM. Первый - это использовать DirectEventStream/BufferedEventStream classes для непосредственной работы с Activities , второй - использовать BAMInterceptor. Первый способ имеет существенный недостаток связанный с тем, что с изменением модели соответствующие вызовы в коде должны изменяться. Это совершенно не приемлемо для оркестраций, поскольку сам смысл использования BAM в BizTalk состоит в изоляции бизнес-модели от ее реализации. Именно поэтому BizTalk-приложения используют только BAMInterceptor. &amp;nbsp;( Как мы увидим в дальнейшем, для полной изоляции потребуется еще BTT).&lt;br /&gt;&amp;nbsp;Требуемая изоляция достигается процессом, известным как конфигурация интерцептора. Идея здесь в сопоставлении с каждым TrackPoint нек. абстракции- location, с которой связан метод (обычно XPath), кот. будет пользоваться Interceptor'ом для извлечения необходимых для мониторинга данных. Конфигурация дается классом&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ms968288.aspx"&gt;ActivityInterceptorConfiguration&lt;/a&gt;, кот. позволяет связать location и TrackPoint для всех BAM-операций : &lt;a href="http://msdn.microsoft.com/en-us/library/ms968285.aspx"&gt;StartNew&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms968277.aspx"&gt;DataExctraction&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/ms917945.aspx"&gt;Continue&lt;/a&gt;, Relate и &lt;a href="http://msdn.microsoft.com/en-us/library/ms968280.aspx"&gt;End&lt;/a&gt;. После этого методом &lt;a href="http://msdn.microsoft.com/en-us/library/ms968295.aspx"&gt;UpdateInterceptor() &lt;/a&gt;вся созданная инфраструктура передается в BAMInterceptor и, наконец, BAMInterceptor сохраняется (сериализуется) во внешнем файле (.bin), готовом к дальнейшему использованию :&lt;br /&gt;&lt;font size="2"&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BAMInterceptor&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; interceptor=&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BAMInterceptor&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;();&lt;br /&gt;config.UpdateInterceptor(interceptor);&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BinaryFormatter&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; bf=&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;BinaryFormatter&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;();&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;Stream&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt; f=&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#2b91af" size="2"&gt;File&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;.Create(activity+&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;&lt;font color="#a31515" size="2"&gt;"_interceptor.bin"&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;);&lt;br /&gt;bf.Serialize(f,interceptor);&lt;br /&gt;f.Close();&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Итак, interceptor готов; используют его в два приёма : сначала создавая callback , кот. должен приносить данные для мониторинга и затем используя метод OnStep().&lt;br /&gt;&amp;nbsp;&lt;u&gt;Вот таким образом и происходит подмена : теперь вместо того, чтобы знать имя ,Activity которое может изменяться при развитии мониторинг-модели, вызывающее приложение должно знать только, какой интерцептор загрузить.&lt;/u&gt;&lt;br /&gt;&amp;nbsp;Созданием таких интерцепторов занимается TPE - Tracking Profile Editor.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;BAM API&lt;/strong&gt;&lt;br /&gt;&lt;a name="cutid3"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;1. EventStream and DirectEventStream&lt;br /&gt;2. Read from BAM&lt;br /&gt;3. ContinuationID and WS&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BAM Portal&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;WCF Extensions&lt;br /&gt;&lt;/strong&gt;&lt;a name="cutid4"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;WF extensions&lt;/div&gt;&lt;br /&gt;&amp;nbsp;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:30771</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/30771.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=30771"/>
    <title>История народов. Монголы.</title>
    <published>2008-03-15T20:12:42Z</published>
    <updated>2008-06-07T15:57:18Z</updated>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Территория Монголии исключительно интересна своей недружелюбностью : такое впечатление, что она как-бы выталкивает из себя собственных детей на поиски чего-то более сладкого и приветливого, чем она сама. Первый такой выкидыш произошел с &lt;a href="http://cruaute.livejournal.com/31587.html#cutid1"&gt;гуннами&lt;/a&gt; в те времена, когда самих монголов еще не было на земле, но те дикари были настолько неразборчивы, что не оставили после себя на родине вовсе никаких корней, предоставив земле заново продемонстрировать своё гостеприимство. Оно заставило себя ждать до&amp;nbsp;XIII века, когда, наконец, период беременности у монгольских женщин стал продолжаться&amp;nbsp;&amp;nbsp;&lt;b&gt;10&lt;sup&gt;−43 &lt;/sup&gt;&lt;/b&gt;секунды,&amp;nbsp;что отвечало наиболее совершенному обороту Земли вокруг Солнца в то время. За один такой оборот большинство монголов разработали &lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%91%D0%BC%D0%B1%D0%BE"&gt;соёмбо&lt;/a&gt;, обогатив тем самым человечество символом процветания и обретения локального буддизма. Тибетские источники указывают, однако, на разделение культурных ценностей между потомками Тему-джина и последователями Гампопы, приведшее к первых на широкий путь орды, а вторых -&amp;nbsp;к строительству первого в мире многолинейного метрополитена&amp;nbsp;Кагью. Оставшиеся монголы были менее склонны к урбанизму, и объеденившись под двумя оккупациями маньчжуров, создали собственное государство на берегах Волги&amp;nbsp;- Хурал. (Полностью - Иссык их Хурал, столица на р. Калка с 1223 г.). Впрочем, существовало оно не долго, но, распавшись, пустило корни от Венгрии до забытой богом колонии в Улан-Баторе...&lt;br /&gt;&lt;br /&gt;Демократические преобразования, начатые еще в Хурале, имели место быть и в наше время : согласно древнерусскому поверью, воды Калмыкии, Дагестана и др. суверенных государств были отравлены зельем, состоявшем наполовину из кумыса-айрага и наполовину из мацы, что является первым случаем разделения ответственности за демократию между евреями и народами, употребляющими квасное всуе...&lt;p&gt;Вклад монголов в кириллическое языкознание трудно переоценить. Отцом этого отдела лингвистики по праву называют отца Бурундая (ок. 1208 - ок. 1250), предпринявшего изыскательскую экспедицию в степи Суздаля и Владимира с целью создания первого вертикального словаря монгольского языка. В завершенном виде эта работа была представлена Его Святейшеством&amp;nbsp;Занабазаром Чолбайсаном в северном аймаке консульства Монголии в ООН в 1938 г. как свидетельство внутреннего аншлюса. Известно, что на его решение о главенствующей роли панмонголизма в устранении «ять» из монгольского языка особое влияние оказал известный русский символист Ал. Блок...&lt;/p&gt;&lt;p&gt;Спорт в Монголии лишний раз подтверждает, что народная традиция упрямее истории. Монгольский мужчина, обладающий 3-мя навыками - стрельбы из лука, владения лошадью и &lt;a href="http://www.pbase.com/xerius/image/48093008"&gt;национальной борьбы&lt;/a&gt; - есть ее продолжатель. Местом доказательств временно служит &lt;a href="http://www.agshin.mn/photojournalism/naadam-2007/"&gt;Наадам&lt;/a&gt;. Кстати, монгольский лук не имеет прицела, но отличается двойным изгибом для повышения дальнобойности. Филателия поддерживает спортивные наклонности народа : в удаленные и временно захваченные династией Минь районы пустыни Гоби марки&amp;nbsp;доставляются гужевым транспортом или специальными оказиями по предписаниям Богдо-гэгена Девятого. &lt;/p&gt;&lt;p&gt;Сам Богдо-гэген на ламу не тянет, потому как не протестует против миролюбивой политики Унгерна, уже который век обильно орошающую эту страну своими чингизгидами.&lt;br /&gt;&lt;br /&gt;Литература :&lt;br /&gt;1. "Монгол-ун Нигуша Тобчиян" под редакцией Всемирного Банка Реконструкции и Развития.&lt;br /&gt;2.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:30629</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/30629.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=30629"/>
    <title>Were we are?</title>
    <published>2008-02-16T23:49:28Z</published>
    <updated>2008-02-18T22:55:56Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;p&gt;1. WCF Bindings&lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p&gt;Основная проблема с BAF связана с тем, что этот framework приспособлен только для BizTalk Server, и все усилия, приложенные для адаптации как LOB Apps (Siebel, SAP etc.), так транспортных протоколов (FILE, MSMQ etc.), приходится повторять заново, если эти системы нужно внедрять в процессы, не использующие BizTalk Server. С другой стороны, WCF разработана со встроенными механизмами, поддерживающими стандарты, не зависящие от протокола, как&amp;nbsp; все семейство WS-*, и поэтому WCF с успехом может быть вставлен в то место, кот. в BizTalk server играют send/receive pipelines. В мире WCF такие pipelines называются bindings, но только с тем преимуществом, что они соединяются не с сервисами BizTalk, а с любыми .NET-приложениями (в частности, с SQLServer SSIS). Что касается первых, то и они не в накладе, поскольку тот же BAF позволяет создать некоторый "универсальный" адаптер, кот. возьмет на себе все, что нужно знать о Transport Proxy, Batches и других компонентах, специфичных для BizTalk Server. На прикладном уровне такой адаптер может дальше вызывать все, что угодно, и, конечно, WCF. Таким образом и разработаны &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=A976DC7D-2296-4F88-BE4D-0D314FCA9E59&amp;amp;displaylang=en"&gt;WCF Adapters in BizTalk 2006 R2&lt;/a&gt;. Относительно остальных&amp;nbsp; .NET-приложений, то для них существует &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0F8007D7-F0C9-4169-8B9C-BA55F8F4C153&amp;amp;displaylang=en#filelist"&gt;WCF LOB Adapter SDK&lt;/a&gt;, не имеющих ничего общего с BizTalk, кроме разве что путающего слова "Adapter" в своем названии. Для большей наглядности, его архитектуру можно сравнить с архитектурой WCF bindings в следующей таблице:&lt;/p&gt;&lt;p&gt;&lt;em&gt;Comparing WCF .NET 3.X bindings with BizTalk approach and WCF LOB SDK Adapter:&lt;/em&gt;&lt;/p&gt;&lt;table cellspacing="0" cellpadding="2" width="528" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;&lt;strong&gt;WS Http Binding&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="94"&gt;&lt;strong&gt;Basic Http Binding&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="96"&gt;&lt;strong&gt;Net Tcp Binding&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="106"&gt;&lt;strong&gt;Web Http Binding&lt;/strong&gt;(*)&lt;/td&gt;&lt;td valign="top" align="center" width="69"&gt;&lt;strong&gt;BizTalk&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="58"&gt;&lt;font color="#000000"&gt;&lt;strong&gt;sap Binding&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;Transaction Flow&lt;/td&gt;&lt;td valign="top" width="94"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="96"&gt;Transaction Flow&lt;/td&gt;&lt;td valign="top" width="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="69"&gt;Pipeline &lt;br /&gt;Component&lt;/td&gt;&lt;td valign="top" width="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;Reliable Session&lt;/td&gt;&lt;td valign="top" width="94"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="96"&gt;Reliable Session&lt;/td&gt;&lt;td valign="top" width="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="69"&gt;Pipeline &lt;br /&gt;Component&lt;/td&gt;&lt;td valign="top" width="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;Symmetric Security&lt;/td&gt;&lt;td valign="top" width="94"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="96"&gt;Symmetric Security&lt;/td&gt;&lt;td valign="top" width="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="69"&gt;Pipeline &lt;br /&gt;Component&lt;/td&gt;&lt;td valign="top" width="58"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;HttpTransport &lt;br /&gt;(Text Message Encoding)&lt;/td&gt;&lt;td valign="top" width="94"&gt;HttpTransport (Text Message Encoding)&lt;/td&gt;&lt;td valign="top" width="96"&gt;TCPTransport &lt;br /&gt;(Binary Message Encoding)&lt;/td&gt;&lt;td valign="top" width="106"&gt;HttpTransport &lt;br /&gt;(Web Message Encoding)&lt;/td&gt;&lt;td valign="top" width="69"&gt;Adapter&lt;/td&gt;&lt;td valign="top" width="58"&gt;RFC Transport&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="103"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="94"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="96"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="106"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="69"&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top" width="60"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;* Emulates REST, parameters passes by JSON. WebGet = HTTP GET, WebInvoke(Method="PUT") = HTTP PUT. New in .NET 3.5. Also used for ASP.AJAX, ATOM, RSS or POX(Plain Old XML).&lt;/p&gt;&lt;p&gt;За развитием сюжета очень интересно следить &lt;a target="_blank" href="http://blogs.msdn.com/adapters/"&gt;отсюда&lt;/a&gt;,&amp;nbsp;а текущая ситуация наглядно представлена &lt;a href="http://blogs.msdn.com/photos/asdk/images/4297684/original.aspx"&gt;здесь&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;2.&amp;nbsp; BizTalk Services&lt;/p&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Остановимся на &lt;a target="_blank" href="http://msdn2.microsoft.com/en-us/library/system.servicemodel.webhttpbinding.aspx"&gt;WebHttpBinding&lt;/a&gt;. Я написал в примечании, что он эмулирует REST, что прекрасно подходит для многих Internet-приложений, кот. не нужен ни SOAP, ни WS-* расширения. Одним из таких приложений является &lt;a target="_blank" href="http://labs.biztalk.net/"&gt;BizTalk Services&lt;/a&gt;. С BizTalk Server его связывает только слово BizTalk, но под ним в Редмонде расширенно понимают все, что имеет отношение к сообщениям и соответствующим инфраструктурам. Собственно, WebHttpBinding родился в BizTalk Services SDK в размышлениях о ISB - &lt;a target="_blank" href="http://labs.biztalk.net/Overview.aspx"&gt;Internet Service Bus&lt;/a&gt;, но начиная с версии 3.5, стал полноправным членом .NET framework, чего нельзя сказать о его братьях, до сих пор лабораторных. BizTalk Services преследует цель вынести MessageBox за пределы корпоративной сети, что ставит перед его авторами целый ряд интересных проблем : Identification (кот. тесно связана с InfoCard), преодоление firewalls (relay), механизмы подписки и публикации etc. В контексте общей идеи S+S, эти "лабораторные занятия" весьма интересны и возможно предположить, что они в итоге выльются в Microsoft Internet Service Bus, пока же это один из немногох экспериментов, разрабатываемых в Microsoft на глазах всех желающих, давая возможность следить за развитием мысли разработчиков по мере ее становления!.&lt;/div&gt;&lt;p&gt;3. ESB Guidance (ESB Toolkit).&lt;/p&gt;&lt;a name="cutid3"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;a target="_blank" href="http://msdn2.microsoft.com/en-us/library/bb931189.aspx"&gt;ESB Guidance&lt;/a&gt; это своего рода противоположная ветвь. И как ей не быть такой, если она развивалась в другом отделе - P&amp;amp;P (Patterns &amp;amp; Practices). Открытый код, прекрасная сопроводительная документация. Я не знаю, насколько правильно я могу расставить акценты в этом продукте, но кажется, он прежде всего обращен к организациям, в которых происходит обмех сообщениями между JMS (и ему подобными) и миром Microsoft. В любом случае, как и положено настоящему ESB, эта реализация предлагает и настоящий ESB Management Portal.&lt;/div&gt;&lt;p&gt;4. WF vs. BizTalk.&lt;/p&gt;&lt;a name="cutid4"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p&gt;Эту тему надо рассмотреть отдельно и очень внимательно, но общее направление ясно уже сегодня : BizTalk можно использовать как host для workflow. Этой цели и служит &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=b701c00f-cdc1-4edb-a975-b9412263ec6e&amp;amp;displaylang=en&amp;amp;hash=ux9MCDq5gmeV%2fbKy975Yvi9bxddidmLfYLS74zadAkB63Z%2bYFgZVX7Bi3Axm%2bVGQXkV%2btRSyIabHey9B48RtQQ%3d%3d"&gt;BizTalk Server R2 Extensions for Windows Workflow Foundations SDK&lt;/a&gt; . Сравнению BRE с WF Business rules посвящена замечательная &lt;a target="_blank" href="http://geekswithblogs.net/cyoung/archive/2007/07/19/114061.aspx"&gt;статья&lt;/a&gt; Charles Young.&lt;/p&gt;&lt;p&gt;Далі буде..&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:30091</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/30091.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=30091"/>
    <title>Message Splitting</title>
    <published>2008-02-02T16:24:01Z</published>
    <updated>2008-02-12T21:27:26Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;p&gt;Вопрос splitting может быть решен в BizTalk несколькими путями, и вот что интересно : как показывает практика, с самым простым не знаком почти никто, а чем сложнее метод, тем больше у него сторонников. Суть же вопроса такова: &lt;/p&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p&gt;При любых обстояльствах, если Messaging "наталкивается" на схему, кот. обозначена как envelope, то сообщение, отвечающее этой схеме создаваться не будет, а будет прежде всего проверено, что написано у envelope-schema в атрибуте BodyXPath. Ожидается, что там будет написан XPath, кот. через SelectNodes() приведет к одному или нескольким nodes, каждый из которых будет рассматриваться как самостоятельное сообщение. Важно, что такое поведение не требует никаких дополнительных усилий : стоит только определить схему как envelope, найти правильный XPath и создать схему для "внутренних" сообщений, и splitting работает. Без лишних pipelines с disassember'ами и проч., и проч.&lt;/p&gt;&lt;p&gt;Так например, это очень удобно для сообщений, приходящих из database-adapters. Такие сообшения очень часто состоят из нескольких строк, выбранных из базы - все одинаковой структуры, но находятся под корневым главным элементом, специфичным для конкретного адаптера. Вот для таких сообщений и стоит определить envelope-schema, причем нас совершенно не должно смущать то, что, как правило, эта схема генерируется самим адаптером - с точки зрения BizTalk она такая же, как и все остальные.&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:29061</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/29061.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=29061"/>
    <title>SSO scenario</title>
    <published>2007-11-17T22:44:03Z</published>
    <updated>2008-01-29T20:58:53Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&amp;#160; Некоторые Receive Adapters (HTTP и SOAP, например) могут вызвать &lt;a href="http://technet.microsoft.com/en-us/library/ms963531.aspx"&gt;ISSOTicket.IssueTicket&lt;/a&gt;() и, в случае успеха, записать результат в (promoted) context property &amp;quot;SSOTicket&amp;quot;. Самое важное в этом то, что делается это для user'a, успешно прошедшего authentication в Receive Port.&amp;#160; Сам этот user ( в форме domainName\userName ) записывается в property &amp;quot;WindowsUser&amp;quot; .    &lt;br /&gt;&lt;font size="1"&gt; Как именно осуществить authentication, решает сам адаптер, а в случае SOAP или HTTP, оба они используют для этих целей свой Isolated Host, т.е. host, кот. бежит в IIS с его Windows Authentication. (IIS7 по умолчанию устанавливается без Windows Authentication, соответствующий модуль должен быть добавлен дополнительно прежде чем администратор или радивый программист получат возможность разумно убрать Anonymous Authentication с IIS Application).&lt;/font&gt;    &lt;br /&gt; Если конфигурация адаптера включает вызов IssueITicket, но без аутентикации, то &amp;quot;SSOTciket&amp;quot; context property сгенерирован не будет, a property &amp;quot;WindowsUser&amp;quot; будет содержать пустое значение (хотя сам этот property будет записан в контекст сообщения).    &lt;br /&gt; Все это делается для того, чтобы соответствующий Send Adapter мог вызвать &lt;a href="http://technet.microsoft.com/en-us/library/ms963529.aspx"&gt;RedeemTicket&lt;/a&gt;(), и тем самым получить искомые внешние mappings для исходного user'a. Понятно, поэтому, что необходимым условием для этого сценария будет тот факт, что оба API - IssueTicket и RedeemTicket - вызываются для одного и того же user'a. Собственно, этому и служит упомянутый property &amp;quot;WindowsUser&amp;quot;. Без него вызов обоих ISSOTicket-методов лишается смысла, и поэтому вообще не стоит пробовать применять SSO без authentication.    &lt;br /&gt;&amp;#160;&lt;font size="1"&gt; SSO устанавливается по умолчанию без поддержки tickets. ssomanage.exe или MMC 3.0 SSO Snap-In решают этот вопрос.     &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font size="2"&gt;При этом я не имею в виду authentication, запрашиваемую на уровне Receive Port, а механизм, с помощью которого сам адаптер &lt;/font&gt;может провести authentication, как &amp;quot;Windows Authentication&amp;quot; в случае SOAP/HTTP и IIS.    &lt;br /&gt;&amp;#160; Сообщение, кот. было опубликовано в MessageBox с установленными &amp;quot;SSOTicket&amp;quot; и &amp;quot;WindowsUser&amp;quot; может попасть оттуда или в оркестрацию, или в Send Port. В случае оркестрации, эти context properties должны быть скопированы из поступившего сообщения в то, кот. будет послано в Orchestartion Send Port, например, так (Message Assignment Shape):    &lt;br /&gt;&amp;#160; &lt;font color="#993300"&gt;msgOut(BTS.SSOTicket) = msgIn(BTS.SSOTicket);     &lt;br /&gt;&amp;#160; msgOut(Microsoft.BizTalk.XLANGs.BTXEngine.OriginatorSID) = msgIn(Microsoft.BizTalk.XLANGs.BTXEngine.OriginatorSID);&lt;/font&gt;    &lt;br /&gt;Второй оператор в этой записи гарантирует, что обсуждаемый RedeemTicket метод будет вызван для того же user'a, для которого раньше вызывался IssueTicket. В случае если этого гарантировать нельзя, сообщение, попадая в SendPort, приводит к &lt;a href="https://secure.topxml.com/BizTalk-Server/rn-272512_Validation-of-the-ticket-failed-(Biztalk,-SSO).aspx"&gt;подобным&lt;/a&gt; ошибкам.    &lt;br /&gt; Все сказанное относится только к тем адаптерам и оркестрациям, кот. работают под Trusted Host. И наконец, напоследок, еше одно замечание о Send Adapters : помните о первом параметре в RedeemTicket! Это ваш affiliate application. Sic! В конце концов, мы ведь хотели всего-навсего перевести credentials вызывающего user'a в external credentials. Именно affiliate application и хранит этот mapping. Properties, доступные аднинистартору Send Adapter'a при конфигурации Send Port'a должны давать возможность выбрать из списка установленных affiliate applications, тем более что BAF поможет в этом - см. &lt;a href="http://msdn2.microsoft.com/en-us/library/ms944507.aspx"&gt;baf:SSOList&lt;/a&gt;.    &lt;br /&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:28765</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/28765.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=28765"/>
    <title>Get your host</title>
    <published>2007-10-11T17:03:57Z</published>
    <updated>2007-10-16T20:05:03Z</updated>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Custom adapters часто имеют свои performance counters, (впрочем, разумеется, не только custom : все адаптеры out of the box поставляются со своими performance counters) и такие performance counters должны распределяться по host instances. Другими словами, быть multi-instance. Достаточная причина, чтобы поинтересоваться, под каким же host'ом работает сейчас адаптер. &lt;br /&gt;Host instance - это Win Service, в процесс которого по мере надобности загружаются разные BizTalk artifacts. (И адаптеры в том числе). Такой host может иметь несколько конфигурируемых AppDomains, а каждый AppDomain - несколько своих assemblies. В случае адаптеров таким host'ом будет [Default Host]. Так вот, мы интересуемся именем того Win Service, кот. служит контейнером для всего этого общежития. Прежде всего, ясно, что никакие Assembly.GetXXX() не помогут, потому что сам Win Service совсем не .Net-приложение, поэтому остается искать имя host'a через Win32 Process. Поможет нам WMI : &lt;br /&gt;&lt;br /&gt;private string _GetHostName() &lt;br /&gt;{ &lt;br /&gt;string strHostName = String.Empty; &lt;br /&gt;try &lt;br /&gt;{ &lt;br /&gt;int nProcessId = Process.GetCurrentProcess().Id; &lt;br /&gt;&lt;br /&gt;EnumerationOptions opt = new EnumerationOptions(); &lt;br /&gt;opt.ReturnImmediately = false; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using( ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", &lt;br /&gt;String.Format("select DisplayName from Win32_Service where ProcessId = {0}", nProcessId), &lt;br /&gt;opt) ) &lt;br /&gt;{ &lt;br /&gt;foreach (ManagementObject inst in searcher.Get()) &lt;br /&gt;{ &lt;br /&gt;string strDispalyName = (string)inst["DisplayName"]; &lt;br /&gt;string[] strToken = strDispalyName.Split(':'); &lt;br /&gt;strHostName = strToken[1]; &lt;br /&gt;} &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;} &lt;br /&gt;catch (Exception ex) &lt;br /&gt;{ &lt;br /&gt;EventLog.WriteEntry(m_strEventLogSource, &lt;br /&gt;"Unable get Host Name for receive adapter. \r\n" + ex.Message, &lt;br /&gt;EventLogEntryType.Error, 50314); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;return strHostName.Trim(); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;Прозрачно и недорого. &lt;br /&gt;Создание соответсвующего performance counter'a теперь выглядит так : &lt;br /&gt;&lt;br /&gt;string strHostName = _GetHostName(); &lt;br /&gt;if (strHostName != String.Empty) &lt;br /&gt;{ &lt;br /&gt;_AvgBachExecutionBase = new PerformanceCounter(m_strAdapterReceivePerfCountCategory, &lt;br /&gt;"Avg. receive batch process time base", &lt;br /&gt;strHostName, false); &lt;br /&gt;.... &lt;br /&gt;} &lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:28516</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/28516.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=28516"/>
    <title>EntLib и SSO.</title>
    <published>2007-10-06T21:18:48Z</published>
    <updated>2008-05-28T00:26:16Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Применение техники, кот. я описал &lt;a href="http://cruaute.livejournal.com/28000.html"&gt;здесь&lt;/a&gt;, было дано очень узко, да и выполнено щербато. &lt;br /&gt;Во-первых, несмотря на то, что StorePassword() работал с IPropertyBag, писать он умел только один-единственный property, во-вторых, зачем было для таких вызовов создавать экземпляр класса? И в-третьих, совсем непонятно, что делает CreateSSOAffiliateApplication() - создает affiliate application или проверяет ее существование? &lt;br /&gt;Улучшенная версия называется по-другому и выглядит так&lt;font size="2"&gt; : &lt;/font&gt;&lt;/div&gt;&lt;a name="cutid2"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/div&gt;&lt;a name="cutid3"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#0000ff" size="2"&gt;&lt;/font&gt;&lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; SetProperties(&lt;span class="kwrd"&gt;string&lt;/span&gt; appName, Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; properties) &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;     &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;       &lt;span class="kwrd"&gt;if&lt;/span&gt; (EnsureSSOAffiliateApp(appName, properties))&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;       { &lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;          IPropertyBag bag = &lt;span class="kwrd"&gt;new&lt;/span&gt; ConfigPropertyBag();&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;          &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (KeyValuePair&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; property &lt;span class="kwrd"&gt;in&lt;/span&gt; properties)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;         {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;            &lt;span class="kwrd"&gt;object&lt;/span&gt; objValue = property.Value;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;            bag.Write(property.Key, &lt;span class="kwrd"&gt;ref&lt;/span&gt; objValue);&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;         }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt; &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;         ISSOConfigStore store = (ISSOConfigStore)&lt;span class="kwrd"&gt;new&lt;/span&gt; SSOConfigStore();&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;         store.SetConfigInfo(appName, idenifierGUID, bag); &lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;      }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;      &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;  }&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;  &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception e)&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;  {&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    System.Diagnostics.Trace.WriteLine(e.Message);&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    &lt;span class="kwrd"&gt;throw&lt;/span&gt;;&lt;/pre&gt;&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;  }&lt;/pre&gt;&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;/font&gt;&lt;/div&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;a name="cutid4"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;br /&gt;Создание Affiliate Application из этого кода выглядит просто абсурдно,например, из-за требуемых разрешений, но сейчас дело не в этом. Сейчас дело в том, что нов. версию SetProperties() можно использовать для сохранения значений секций конфигурации EntLib. &lt;br /&gt;В самом деле, если предварительно создать (&lt;em&gt;ssomanage.exe&lt;/em&gt; -createapps XXX.xml) столько Affiliate Application, сколько имеется известных секций конфигурации (а всегда ведь можно добавить и то, и другое), то в SetProperties() можно передать : &lt;br /&gt;&lt;font color="#2b91af" size="2"&gt;&lt;br /&gt;Dictionary&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;&amp;gt; propeties = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;Dictionary&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt;&lt;font size="2"&gt;&amp;gt;(); &lt;br /&gt;&lt;font size="2"&gt;propeties.Add("&lt;font color="#993300"&gt;SectionType&lt;/font&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;"loggingConfiguration"&lt;/font&gt;&lt;font size="2"&gt;); &lt;br /&gt;propeties.Add("&lt;font color="#993300"&gt;SectionValue&lt;/font&gt;&lt;strong&gt;"&lt;/strong&gt;&lt;font size="2"&gt;, &amp;lt;section xml content&amp;gt;&lt;/font&gt;&lt;font size="2"&gt;);&lt;/font&gt; &lt;br /&gt;&lt;font color="#2b91af" size="2"&gt;ssoHelper&lt;/font&gt;&lt;font size="2"&gt;.SetProperties(&lt;font color="#a31515"&gt;"&lt;/font&gt;&lt;font color="#993300"&gt;SampleApp1.loggingConfiguration&lt;/font&gt;&lt;font color="#a31515"&gt;"&lt;/font&gt;, propeties); &lt;br /&gt;&lt;br /&gt;Соответсвующие определения для &lt;em&gt;ssomanage.exe&lt;/em&gt; выглядят так : &lt;br /&gt;&lt;br /&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;font color="#990000"&gt;&lt;span class="t"&gt;application&lt;/span&gt;&lt;span class="t"&gt; name&lt;/span&gt;&lt;/font&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;SampleApp1.loggingConfiguration&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;description&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;span class="tx"&gt;&lt;strong&gt;SampleApp1.loggingConfiguration&lt;/strong&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;description&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;appUserAccount&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;span class="tx"&gt;&lt;strong&gt;BizTalk Application Users&lt;/strong&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;appUserAccount&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;appAdminAccount&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;span class="tx"&gt;&lt;strong&gt;BizTalk Server Administrators&lt;/strong&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;appAdminAccount&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;field&lt;/font&gt;&lt;/span&gt; &lt;span class="t"&gt;&lt;font color="#990000"&gt;ordinal&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;0&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; label&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;reserved&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; masked&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;no&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;field&lt;/font&gt;&lt;/span&gt; &lt;span class="t"&gt;&lt;font color="#990000"&gt;ordinal&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;1&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; label&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;SectionType&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; masked&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;field&lt;/font&gt;&lt;/span&gt; &lt;span class="t"&gt;&lt;font color="#990000"&gt;ordinal&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;2&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; label&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;SectionValue&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; masked&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;field&lt;/font&gt;&lt;/span&gt; &lt;span class="t"&gt;&lt;font color="#990000"&gt;ordinal&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;3&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; label&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;LastModified&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; masked&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="b"&gt;&lt;strong&gt;&lt;font color="#ff0000" face="Courier New"&gt;&amp;nbsp;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt; &lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;flags&lt;/font&gt;&lt;/span&gt; &lt;span class="t"&gt;&lt;font color="#990000"&gt;configStoreApp&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; allowLocalAccounts&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;"&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt; enableApp&lt;/font&gt;&lt;/span&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;="&lt;/font&gt;&lt;/span&gt;&lt;b&gt;yes&lt;/b&gt;&lt;font color="#0000ff"&gt;&lt;span class="m"&gt;"&lt;/span&gt;&lt;span class="m"&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&amp;nbsp; &lt;br /&gt;&lt;span class="m"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span class="t"&gt;&lt;font color="#990000"&gt;application&amp;gt;&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;Эта процедура заполнения значений секций конфигурации прекрасно выполняется в EntLib Console, поэтому все, что осталось сделать - это развернуть реализацию для полноценной поддержки EntLib и возможности встраиваться в Console. (Довольно утомительное, но безусловно полезное занятие, ключевые моменты в котором - реализация интерфейсов &lt;font color="#2b91af" size="2"&gt;IConfigurationSource, &lt;font color="#2b91af" size="2"&gt;IConfigurationParameter &lt;font color="#333333"&gt;etc.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#333333"&gt;) &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;&lt;font color="#000000"&gt;И наконец, вот как выглядит клиентское обрашение к этим изысканиям : &lt;br /&gt;&lt;br /&gt;&lt;font color="#2b91af"&gt;IConfigurationSource&lt;/font&gt;&lt;font size="2"&gt; _ssoConfigSource = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;SsoConfigSource&lt;/font&gt;&lt;font size="2"&gt;(&lt;/font&gt;&lt;font color="#a31515" size="2"&gt;"ODS"&lt;/font&gt;&lt;font size="2"&gt;, &lt;/font&gt;&lt;font color="#a31515" size="2"&gt;"Instrumentation"&lt;/font&gt;&lt;font size="2"&gt;); &lt;br /&gt;&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;LogWriterFactory&lt;/font&gt;&lt;font size="2"&gt; _logWriterFacroty = &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;LogWriterFactory&lt;/font&gt;&lt;font size="2"&gt;(_ssoConfigSource); &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;font size="2"&gt; (&lt;/font&gt;&lt;font color="#2b91af" size="2"&gt;LogWriter&lt;/font&gt;&lt;font size="2"&gt; logWriter = _logWriterFacroty.Create()) &lt;font color="#008000" size="2"&gt;// здесь реальный вызов SetProperties()&lt;/font&gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp; logWriter.Write(log); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;а этот код уже практически подходит для вызова из оркестрации.&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/font&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:28183</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/28183.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=28183"/>
    <title>КФМ. Июль - Сентябрь</title>
    <published>2007-10-01T23:27:56Z</published>
    <updated>2007-10-07T23:10:35Z</updated>
    <category term="ad usum internum"/>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;p&gt;0.1. "Прогулки в лесах" У. Эко. Возможно, это были наброски диссертации, а может быть и вольности писателя, более популярного в Москве, чем в Риме. Я не знаю, чего больше досталось Нервалю - шпаргалок для сочиненй ("Сильвия" входит в в обязательную программу французской средней школы) или дотошности. Литературоведение легко может стать таким, как его видит У. Эко - близоруким подростком, делающим круглые глаза при виде дальше переплета.&lt;br /&gt;0.2. "АГ" - пропорционально уравновешивает новости ,и даже читая его в десятый раз, понимаешь, что такое проза : баланс вкуса (в данном случае = такта ) и языка.&lt;br /&gt;0.3. Мне из Израиля не видно всего, да и не нужно мне всего видеть, но "1+1" - открытие сезона. "Джерела тоталітарізму" Арендт издавалсь при его участии. И никто не пугается, как в Риге или Тель-Авиве, когда в студии говорят по-русски.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:28000</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/28000.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=28000"/>
    <title>Dynamic Send Transmitters' Configuration</title>
    <published>2007-09-27T00:07:35Z</published>
    <updated>2007-10-08T13:38:28Z</updated>
    <category term="biztalk"/>
    <content type="html">&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;1. Send Transmitter может определить, назначен ли он на dynamic или static port, только во время исполнения своего главного метода &lt;em&gt;TransmitMessage&lt;/em&gt; (ProcessMessage&amp;nbsp;in&amp;nbsp;BaseAdapter impelementation)&amp;nbsp;. Обычно это делается проверкой property &amp;lt;AdapterConfig&amp;gt; из контекста сообщения, кот. нужно послать. Если этот property существует, значит адаптер направлен на static portи из прочитанного property можно грузить конфигурацию порта. Если этого property нет, то адаптер направлен на dynamic port,&amp;nbsp; и единственное место, где можно прочитать конфигурацию - Send Handler. Эта конфигурация передается адаптеру как часть протокола инициализации и обычно хранится в месте, доступном из&amp;nbsp; &lt;em&gt;TransmitMessage&lt;/em&gt;, так что не вызывает труда ее прочитать, однако Send Handler может и не быть отконфигурирован заранее. На этот случай последней возможностью будет Uri, установленный для dynamic port из оркестрации.&lt;br /&gt;2. В нек. случаях конфигурация Send Port/Send Handler включает пароли и др. секретную информацию, кот. нельзя хранить как часть Uri. Лучшего места, чем SSO, для нее нет!&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;font size="1"&gt;Сохраняемый пароль должен быть связан отношением 'один-к-одному' с Uri, для чего, собственно, и служит API &lt;/font&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa770934.aspx"&gt;&lt;font size="1"&gt;ISSOConfigstore.SetConfigInfo&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;&amp;nbsp;: его второй параметр и есть точка входа в коллекцию пар "Uri - password". Говоря более строго, надо заметить, что с точки зрения самого SSO, уникальной парой должно быть только сочетание первого и второго параметров этой функции, которые отвечают колонкам таблицы SSOX_ExternalCredentials - ec_xa и ec_xu. а уникальность пар 'Uri - password" должна контролироваться апликацией ( в нашем случае BizTalk адаптером ). О первом параметре SetConfigStore стоит сказать еще несколько слов. Это имя SSO Application, кот. должна быть создана заранее, причем здесь мы имеем дело с особым случаем этих апликаций : теми, кот. создаются с флагом SSO_FLAG_APP_CONFIG_STORE (0x100000). Этот флаг не совместим почти ни с какими другими, &amp;nbsp;и приложения, созданные с этим флагом, не отображаются в ssomanage -listapps.Служат такие апликации, оправдывая своё название, в качестве Configuration Store. Еще остался третий параметр - знаменитый COM'овский IPropertyBag. (Кстати, весь SSO написан на COM, и для совместимости с .Net в "Program Files\Common Files\Enterpriz\se Single Sign-On\Interop1.1" предлагается его interop. Именно его, единственного,&amp;nbsp;и нужно добавлять в references .Net-проектов.). Имплементация этого IPropertyBag не должна вызывать затруднений : для внутренней&amp;nbsp;простой, как в случае паролей, коллекции хорошо подойдет Hashtable, для более сложных случаев хорошим кандидатом будет &lt;a href="http://msdn2.microsoft.com/en-us/library/f7fta44c(vs.80).aspx"&gt;SortedDictionary&amp;lt;TKey, TValue&amp;gt;&lt;/a&gt;. Ну вот, а теперь и код, демонстрирующий сказанное .&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public bool&lt;/font&gt; StorePassword(&lt;font color="#0000ff"&gt;string&lt;/font&gt; strUri, &lt;font color="#0000ff"&gt;object&lt;/font&gt; strPassword)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( CreateSSOAffiliateApp() )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#008080"&gt;IPropertyBag &lt;/font&gt;bag = new &lt;font color="#008080"&gt;XXXPropertyBag&lt;/font&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bag.Write("&lt;font color="#993300"&gt;Password&lt;/font&gt;", &lt;font color="#0000ff"&gt;ref&lt;/font&gt; strPassword);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;ISSOConfigStore&lt;/font&gt; store = (&lt;font color="#008080"&gt;ISSOConfigStore&lt;/font&gt;)new SSOConfigStore();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; store.SetConfigInfo(m_strAppName, strUri, bag);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;font color="#0000ff"&gt;return true&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return false&lt;/font&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;public string&lt;/font&gt; GetPassword(&lt;font color="#0000ff"&gt;string &lt;/font&gt;strUri)&lt;br /&gt;{&lt;br /&gt;&lt;font color="#008080"&gt;&amp;nbsp;&amp;nbsp;ISSOConfigStore&lt;/font&gt; store = (&lt;font color="#008080"&gt;ISSOConfigStore&lt;/font&gt;)&lt;font color="#0000ff"&gt;new&lt;/font&gt; SSOConfigStore();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#008080"&gt;IPropertyBag&lt;/font&gt; bag = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;XXXPropertyBag&lt;/font&gt;();&lt;br /&gt;&amp;nbsp; store.GetConfigInfo(m_strAppName, strUri, &lt;font color="#008080"&gt;SSOFlag&lt;/font&gt;.SSO_FLAG_RUNTIME, bag); // RUNTIME&amp;nbsp;флаг очень важен&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;font color="#008080"&gt;Object&lt;/font&gt; strPassword = &lt;font color="#0000ff"&gt;new object&lt;/font&gt;();&lt;br /&gt;&amp;nbsp; bag.Read("Password", &lt;font color="#0000ff"&gt;out &lt;/font&gt;StrPassword, 0);&lt;br /&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;return&lt;/font&gt; (&lt;font color="#0000ff"&gt;string&lt;/font&gt;)strPassword;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;и наконец&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;private bool&lt;/font&gt; CreateSSOAffiliateApp()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;try&lt;br /&gt;&lt;/font&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;ISSOAdmin&lt;/font&gt; admin = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;ISSOAdmin&lt;/font&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;admin.CreateApplication(m_strAppName, "&lt;font color="#800000"&gt;Teradata_General&lt;/font&gt;", "&lt;font color="#800000"&gt;someone@xxx.com&lt;/font&gt;",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&lt;font color="#800000"&gt;BizTalk Application Users&lt;/font&gt;", "&lt;font color="#800000"&gt;BizTalk Server Administrators&lt;/font&gt;",&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;SSOFlag&lt;/font&gt;.SSO_FLAG_APP_CONFIG_STORE | &lt;font color="#008080"&gt;SSOFlag&lt;/font&gt;.SSO_FLAG_APP_ALLOW_LOCAL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admin.CreateFieldInfo(m_strAppName, "&lt;font color="#993300"&gt;reserved&lt;/font&gt;", &lt;font color="#008080"&gt;SSOFlag&lt;/font&gt;.SSO_FLAG_NONE); &lt;font color="#008080"&gt;// первое поле не маскируется&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admin.CreateFieldInfo(m_strAppName, "&lt;font color="#800000"&gt;Password&lt;/font&gt;", &lt;font color="#008080"&gt;SSOFlag&lt;/font&gt;.SSO_FLAG_FIELD_INFO_MASK);&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;// Enable application&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admin.UpdateApplication(...);&lt;br /&gt;&lt;font color="#008080"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Purge changes&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; admin.PurgeCacheForApplication(m_strAppName);&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;&amp;nbsp;&amp;nbsp; return true;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;catch&lt;/font&gt;(&lt;font color="#008080"&gt;Exception&lt;/font&gt; ex)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;if&lt;/font&gt;( ex.Message.Contains("&lt;font color="#800000"&gt;The application already exists.")&lt;/font&gt; == &lt;font color="#0000ff"&gt;true&lt;/font&gt; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;return true&lt;/font&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;else&lt;br /&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;;&amp;nbsp;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:cruaute:27775</id>
    <link rel="alternate" type="text/html" href="http://cruaute.livejournal.com/27775.html"/>
    <link rel="self" type="text/xml" href="http://cruaute.livejournal.com/data/atom/?itemid=27775"/>
    <title>MCTS (часть IV)</title>
    <published>2007-09-08T14:07:18Z</published>
    <updated>2007-09-08T22:51:26Z</updated>
    <category term="ad usum internum"/>
    <content type="html">&lt;font size="3"&gt;&lt;strong&gt;4. Messaging&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;a. ACK/NACKk's&lt;/u&gt;&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;Поскольку Messaging Engine никак не зависит от XLANGs Engine, оркестрация, кот. использует, например, one-way send-port, не может узнать, было ли на самом деле послано сообщение. Именно для того, чтобы сообщить ей об этом, BizTalk предлагает механизм, известный как "Delivery notification". Устроен он на скрытом создании &lt;em&gt;correalation set&lt;/em&gt; в случае, если порт, через который отправляется сообщение, помечен флагом "Delvery Notification = Transmitted" (и вызов его находится в synchronized scope). В этом случае создается неявный direct subscription,&amp;nbsp;Send которого инициализирует созданный correlation set, а Receive - follows correlation set, т.е является таким образом &lt;em&gt;instance subscription&lt;/em&gt;.&lt;br /&gt;Когда Messaging ng Engine заканчивает обработку сообщения из такого порта, он публикует в Message Box специальное "уведомление" - ACK или NACK типа, &lt;em&gt;mutatis mutandis. &lt;/em&gt;Если созданный subscription получает ACK-уведомление, orchestration благополучно может покинуть synchronized scope и продолжить выполнение; если&amp;nbsp; приходит NACK - будет сгенерирован exception, кот. orchestration получит как &lt;a href="http://msdn2.microsoft.com/en-us/library/ms868866.aspx"&gt;DeliveryFailureException&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;ACK-уведомления публикуются, если посылка сообщения через соответствующий физический порт прошла успешно, и в context proprety сообщения присутствовало "AckRequired", установленное в&amp;nbsp; true. Если orchestration-port помечен как "Delivery Notification = Transmitted", то этот property будет установлен на выходе из orchestration автоматически.&amp;nbsp;&lt;br /&gt;&amp;nbsp;NACK-уведомления публикуются при тех же обстоятельствах, если сообщение было suspended. (Разумеется, адаптер решает, в каких случаях он попросит Messaging Engine перевести сообщение в состояние suspended).&lt;br /&gt;&amp;nbsp;ACK и NACK-уведомления имеют один и тот же MessageType, однако ACK не содержит message parts, а вся информация о нем находится в context properties. В случае NACK сообщение представляет собой&amp;nbsp; SOAP Fault envelope, содержащий фактическое NACK-уведомление в своей &lt;a href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/#faultdetailelement"&gt;&amp;lt;detail&amp;gt; части&lt;/a&gt;. Генерируемый &lt;em&gt;DeliveryFailureException&lt;/em&gt; десериализуется из&amp;nbsp;SOAP envelope&amp;nbsp;, поэтому он может быть преобразован (cast) обратно в &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.services.protocols.soapexception(vs.80).aspx"&gt;SOAPException&lt;/a&gt;, а оттуда легко получить то оригинальное сообщение, кот. (из адаптера) привело к exception. Следующий фрагмент илюстрирует этот метод (&lt;u&gt;а других способов получить сообщение исключения из адаптера мне пока не известно&lt;/u&gt;)&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;font size="2"&gt;&lt;p&gt;// Cast Your Exception to SOAP Exception&lt;br /&gt;// This must be inside an Atomic Scope since the class is non-serl.&amp;nbsp;&lt;br /&gt;SoapException = (System.Web.Services.Protocols.SoapException)DelException;&lt;/p&gt;&lt;p&gt;// Load the XML into a new XML Document&lt;br /&gt;xDoc = new System.Xml.XmlDocument();&lt;br /&gt;xDoc.LoadXml(SoapException.Detail.InnerXml);&lt;/p&gt;&lt;font size="2"&gt;Полученное сообщение, ясное дело, может быть использовано для создание любого другого, более приемлемого для апликации.&lt;br /&gt;Остается только добавить, что ACK/NACK- публикации не ограничены только one-way send портами. Более подробно об этом &lt;a href="http://blogs.msdn.com/kevinsmi/archive/2004/07/03/172574.aspx"&gt;здесь&lt;/a&gt;&amp;nbsp;и &lt;a href="http://www.biztalkgurus.com/Samples/Delivery-Notification-NAck-Orchestrati