• Авторизация


CCF 2.0 06-03-2005 02:32


Welcome to CCF 2.0. То, о чем так долго говорили большевики... We exposed to see at least 3 great features - 1) . TAPI (and TSAPI) transfers call context to desktop application (called in CCF Agent Desktop),  2). External applications are hosted in .NET environment, 3) BizTalk BAF (Adapter Framework) briges RT application to messaging. Concerning BizTalk is much more to say from CCF perspective - BAM in action, consuming web-exposed orchestrations and so on. It's real field-test for BTS!


But before you start, you need to make up the framework installation. There is a document called 'Developer's Guide' that significally helps. Read it carefully. Here I'll highlight the principal points.


1. Start with DB installations - CSR and CSS folders (under Database).


2. Add yourself to both DB users as db_owner! Alternatively, you may follow Guide's recommeded way - add youlself to ccfusers group, but currently this group is not mapped correcly to SQL Logins. Better yet - add yourself to this group and to DBs separately!


2a). Insert new records to CCFUser table in ContactCenter DB. One for any account that intended to run Agent Desktop. For example


INSERT INTO CCFUser (UserID, DomainUser, FirstName, LastName, Type,Picture)
VALUES     (6, N'framhostolegk', N'Oleg', N'Kleiman', 1, 'DemoAgentOne.jpg')


3. Copy DemoTAPI provider to system32. The Softphone application is distributed as part of AgentDesktop setup and not separately as Guide states.


4. Test Softphone till you fill comfortable with it and understand its functionality.


5. Install Web Services. Remove anonymous access to all of them! It's critical to Agent Desktop since it depends, for example, on ContactCenter.AgentStats.AgentLogin2() method to authenticate the agent and expect to find the appropriate record in ContactCenter DB (CCFUser table)


5a. Edit web.config for ContactCenter and ContactCenterAIF Web Services. Unless you've created and properly modied 'ccfusers' domain group, edit authorization section to allow access to all users.


6. Run Agent Desktop and Softphone simultaneously. You will see the first amazing feature - desktop application gets TAPI call context!


Next features - in next post!

комментарии: 0 понравилось! вверх^ к полной версии
WebServices authentication in IIS6. 06-03-2005 01:45


Чтобы понять, как работает authentication, напишем простой Web service с одним методом :


[WebMethod]


public string GetUserIdentity()


{


      try


      {


            IPrincipal principal = base.User;


            string strUserName = principal.Identity.Name;


                 


            return strUserName;


      }


      catch


      {


            return null;


      }


}


Для того, чтобы этот код исполнял именно то, для чего он предназначен - вернуть имя того, кто его запускает (это совсем не одно и то же, что currently logged user), понадобятся 2 дополнительные настройки –Directory Security option from IIS Admin и его  web.config. Во-первых, IIS Admin. Если включить Enable Anonymous Access, то никакой authentication просто не будет производиться. В этом, собственно, и состоит смысл anonymous access. Т.е. для начала он должен быть убран. Теперь web.config. Its authentication section is just duplicates the IIS Admin options and hence confusing. Bear in mind that Web Services are configured thru web.config to bring the illusion of independency on IIS for multi-platform deployment. Whatever! Just make this section to look like


<authentication

Читать далее...
комментарии: 0 понравилось! вверх^ к полной версии

Quotation of the week 05-03-2005 04:50


" ...ибо то, что вы называете страстями, есть не душевная энергия, а лишь трение между душою и внешним миром..."
Сталкер
комментарии: 0 понравилось! вверх^ к полной версии
Классификация дур 01-03-2005 14:12

Это цитата сообщения политикан_неудачник Оригинальное сообщение

Дура феерическая

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

Дура злобная

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

Дура бытовая

Обнаруживает с детства вдолбленные матерью поведенческие клише, как-то: готовка, уборка, стирка, глажка, парикмахерская, магазин. Вырезает из женских журналов рецепты блюд, диет, масок для лица и коленок. Круг чтения ограничивается женскими романами и гороскопами. Точно знает почем помидоры на рынке и что логистика - раздел филологии.

Дура возвышенная

Полная противоположность предыдущей. Не приспособлена к быту, зато всей душой тянется к прекрасному. С легкостью рассуждает о колористике в картинах Малевича, эстетике экзистенциализма или различиях стилистики Мураками и Миссимы. Мечтает о прекрасном принце на белом коне, а в книжке «Анжелика и король» держит засушенный цветок, подаренный в далеком детстве 13-тилетним соседским мальчишкой. Юмора не понимает. Питается подгоревшей яичницей со скорлупой.

Дура набитая

Оптимистка, на всякие жизненные темы рассуждает очень здраво, но при этом умудряется влипать в совершенно дурацкие ситуации. Даже если окружающие в один голос советуют одно (а посоветоваться она любит) - из нелепых ситуаций выходит, согласуясь со своей парадоксальной логикой. Потом плачется, обзванивая всех ранее советовавших. Через некоторое время впадает в философию («могло бы быть хуже») и влипает в следующую дурацкую ситуацию.

Дура клиническая

Этот вид изучается в специальных медицинских учреждениях. На свободном выгуле практически не встречается.
комментарии: 0 понравилось! вверх^ к полной версии
О приличных девушках...1. Приличная девушка 01-03-2005 13:27

Это цитата сообщения юлька_из_Израиля Оригинальное сообщение

[показать]
[показать]
О приличных девушках...
1. Приличная девушка должна идти в постель в 9 часов, потому что в 11 она должна быть в своей.

2. При взгляде на неё должно казаться, что она просто ангел во плоти, но хочешь плоти - заплати.

3. У парня приличной девушки должны быть рога, на которых она будет сушить своё белье. И чем приличнее девушка, тем приличнее и незаметнее будут рога.

4. Приличная девушка не должна сосредотачивать внимания на том, как мужчина одет, это может развить у него комплексы! Лучше похвали его уши.

5. Грудь - это важное стратегическое оружие индивидуального пользования, но массового поражения. Если правильно наставить его на неприятеля, то маленькая победоносная война тебе обеспечена.

6. Приличная девушка - слабое, беззащитное существо, от которого нет спасения!

7. Приличная девушка может зевать по 1000 разных причин, и желание спать в этом списке будет на одном из последних мест.

8. Приличные девушки делятся на жен и на любимых.

9. Приличная девушка должна быть непокобелима.

10. Приличная девушка как калькулятор: прибавляет проблемы, отнимает время, умножает расходы и делит имущество.

11. Приличная девушка любит порядок: сегодня один любовник, а завтра другой.

12. Приличная девушка обходит "Запорожец" сзади, "Мерседес" - спереди, а "Камаз" - стороной!

13. Любая приличная девушка должна помнить: если парень поматросил и бросил, то это обида, а если не поматросил и бросил, то это уже оскорбление
комментарии: 0 понравилось! вверх^ к полной версии
BTS macros 28-02-2005 16:34


Owen Allen has a list of known macros for using in port configurations. As far as I remember,  datetime_bts2000 was problematic (at least before SP1)
комментарии: 0 понравилось! вверх^ к полной версии
Messaging without orchestration 26-02-2005 15:37


Задача такая : сканируем ftp location; для каждого обнаруженного там файла - обновляем базу, соответственно его содержанию. Например, файлы, кот. будут находиться на ftp, имеют такую структуру:


<

ns0:Result batchNum="22" xmlns:ns0="http://pbControl.ResultSchema" />

всего с одним attributed element для простоты. В базе обновляем таблицу, в кот., скажем, одно из полей равняется атрибуту batchNum.


Можно, конечно, писать orchestration - receive shape для получения из ftp, transform shape (obviously embraced by construction block) with mapping и send shape, связанный с SQLAdapter-generated-schema, в кот. есть вызов stored procedure или updategram на обновление. Работает.


Но можно и не писать orchestration вовсе : создаем receive port (with ftp receive location), в его inbound maps добавляем наш map из transform shape, т.е. любой поступающий туда документ из ftp будет сразу преобразовываться в SQL updategram - 2 shape из orchestration уже не понадобятся. Можно, кстати, добавить несколько inbound maps - каждый для документов со своей schema. Можно добавить и несколько receive locations - send port ведь привязывается к receive port, не к receive location. Осталось добавить send port для SQL. Добавили. Теперь свяжем его напрямую с уже созданным receive port. Через filter : Edit->Filters & Maps->Filters. Фильтр будет такой : Property->BTS.ReceivePortName, Operation->'==', Value->[Имя созданного receive port].Вот и все. Orchestration не понадобился, а вместе с ним и its performance penalty.


Как же это работает? Чтобы понять, стоит просто взглянуть на BTSSubscriptionViewer - сконфигурированный так send port просто создает свой subscription

[показать]
комментарии: 0 понравилось! вверх^ к полной версии
FTP in .NET 24-02-2005 16:37


FTP не поддеживается напрямую из .NET Framework. (Кстати, как и named pipes). Ничего с этим не поделаешь - остаются 2 варианта : 3-rd party tools и WinInet interop. В случае выбора первого варианта, рекомендую IP*Works! Zip
комментарии: 0 понравилось! вверх^ к полной версии
Post & comment 19-02-2005 02:13


Не доверяю hosting ЖЖ, поэтому приведу без ссылок
Post (borguess) - Израильтянка, работавшая раньше в security, рассказала мне анекдотический случай.
Девушка, которая только начала работать в security на таможне, проводила интервью с православным священником, прибывшим на святую землю с официальным визитом. Ее английский был "shaky", к тому же она нервничала. Да и рясу, видимо, видела до того не часто. И оговорилась - вместо того, чтобы сказать "We need to cross-examine you", она сказала "We need to crucify you". Священник не растерялся. В ответ он спросил: "Again?!" ;)
My comment - Ницше однажды подписался Der Gekreuzigte - crusified - под такими словами: "Вы наконец-то меня нашли, теперь вся проблема состоит в том, чтобы меня потерять". Адресованы они были одному приверженцу еще не состоявшегося тогда жанра рантоведения, которому показалось, что он накоцец-то понял, о чём Ницше вел речь. Значительно позже Мамaрдашвили докопался до сути Der Gekreuzigte - "Ницше говорит, что теперь задача потерять. Значит, <...> мысль или состояние понимания мало того что представляет возможную невозможность, если в конце концов все сошлось <...>, то этого сошедшегося тоже нельзя иметь. Нельзя иметь в том смысле, что это нельзя, раз получив, положить в карман и тем самым иметь и потом, когда тебе надо, к этому снова обращаться". И наконец еще Симона Вайль знала, что в подобные состояния понимания иногда врубаются, впадают на несколько мгновений или, если сложится, на несколько лет.
Теперь улыбнись другой улыбкой, перечитав комментируемый пост.
Be nice to nerds - дальше по смыслу.
комментарии: 1 понравилось! вверх^ к полной версии
Кое-что об крестовых походах 19-02-2005 01:06


Бретань (Bretagne) своим именем и происхождением обязана той же идее, которая так фанатично была выражена Петром Пустынником. Если бы крестоносцам повезло больше, саму Петру была бы уготована участь подобная бретонским "Отцам Родины". Заслуженное поклонение, правда, имеет аналоги не только в христинстве, но и в иудаизме. С другой стороны, здесь оно имеет свои акценты.
Таков, видимо, ход истории - правомерность уэльсcких монахов и превращение их потомков в бретонов отличается от крестовых походов только конечным результатом : проникнутые уважением к самой древности событий, мы уже не отличаем побед Готфрида под Иерусалимом от Номиноэ под Нантом.
комментарии: 0 понравилось! вверх^ к полной версии
Другая жизнь 18-02-2005 17:42


Так живут нормальные люди. А так они смотрятся со стороны. :)
комментарии: 0 понравилось! вверх^ к полной версии
Sharing code with .netmodules 14-02-2005 03:40


Assembly состоит из одного или более modules. Assemblies, создаваемые MS Studio, строятся ровно из одного модуля. (References это НЕ модули). Studio также не имеет возможности создавать только лишь модуль, без assembly. А тем не менее, иногда это полезно.Для создания module используют command-line compiler - (csc для C#, в Cw пока я не видел такого) с таким ключом:csc /t:module code.csНа выходе получится code.netmodule. Его можно подключить к существующему assembly:csc /t:exe /addmodule:code.netmodule class1.csПосле успешной компоновки классы, методы и проч. publics видны из class1. Рекомендуется к использованию в групповых проектах для законченных частей кода как альтернатива class library. Для просмотра (browsing) имеющихся модулей очень полезным может быть .NET Reflector. [показать]
комментарии: 0 понравилось! вверх^ к полной версии
Quotation of the week 14-02-2005 01:33


Детство, зрелость, старость легко прожить правильно и полно. Юность легко делается недостойна подлинного человека. Не потому ли пустые краснобаи так любят кричать о юности? Для них это самая приятная пора: приятно вспомнить, как мало от тебя требовалось и как много давалось.


Лагерквист. В мире гость.

комментарии: 0 понравилось! вверх^ к полной версии
Вот как наказывается двойное фианкетто в сицилианской защите 12-02-2005 17:37


Kleiman - tc(c)ICC, 2005. Round 11.
1. e4 c5
2. Bc4 Nc6
3. Nf3 g6
4. O-O Bg7
5. d3 b6 ? (имеет ввиду двойное фианкетто?)
6. Nc3 Nf6
7. e5 (!) Ng4
8. Bf4 Ngxe5
9. Nxe5 (освобождая f3 для королевы) Nxe5
10. Bxe5 Bxe5
11. Qf3 Black resigns
комментарии: 0 понравилось! вверх^ к полной версии
Итоги переписки на форуме narod.co.il 11-02-2005 03:31


Сцена 2158. Ночь. Те же и v_g_t.


v_g_t (Баском. Уверенно, как человек, чувствующий, что никто на него не насрал ).


Я нашел себе работу. И машину я купил.
И детишки подрастают. Да и сам я полон сил.
И уже уже на сайтах мелких я советы не даю.
В модераторы подался - модерирую струю.
Я подкован, я начитан, я умен, я деловит
и стишками пробавляюсь иногда, чтоб сделать вид.
Не пускаю пыль в глаза я, никуда не залезаю,
eсли что я знаю твердо, так скажу об этом гордо.

Но родительский фантом
оставляет мне кондом.


Массы (задумчиво, как водится в массах, без запятых). Ну а сзади а сзади? Mожет не еврей?


v_g_t (Устало. Пока он говорит, фоном нарастает "Гимн пролетарию" Галича)


Никакого барабана. Гегемон я или нет?
Почему я должен слушать долженэтот ваш флюдийский бред?
Я в семью пришел с работы. У меня шиши-шабат.
Эти мне сюр-реалисты, в голове от них набат!
Я возьму с Пашуней литру, а не хватит - так и два.
А когда проснусь - чтоб тихо. "Не болеет голова".

Маргарита (немного "акая"). Не правда ли, весна скоро?


ladyl. Какой чудесный вопрос, душенька! Сама-то я не очень знаю, но вот END обязательно скажет.


END'у (дательный падеж - кому, чему)


Конец? пи...дец? фиаско?
Умом хоть не обласкан,
но форум для меня -
как сено для коня.

Маргарита (Обращаясь к Евгения. Нежно).Ой, какой у вас разрезик сегодня! Неужели сами выбирали?


Евгения(Гневно).


Ведь я пишу - а это не спроста.
И всем моим постам не счесть числа!
И я совсем уже не та девица:
как есть что в голове - спешу делиться!

Массы (Некультурные). Так телись!


[показать]

Главный батька


Хоть мы не знаем, что такое CAS,
но в нас звучит народный глас!
комментарии: 0 понравилось! вверх^ к полной версии
Ошибались мамы-папы, кто ж осудит их теперь? 11-02-2005 03:30


Ошибались мамы-папы, кто ж осудит их теперь?
А детишки подрастали, интернет не застебали,
но форумах народных ими найден был свободный
и, под стать им, благородный уголок своих идей.

Стебануться кто не любит? Это прямо ремесло
для админов на порталах. Вот куда их понесло!

Кто админом не зашуган, у того - крутой басок.
Может высказаться парень, проявить свой голосок.
Ну, а кто зашуган больше - тенорочком, скромно так:
"Нас ведь все-таки побольше! Отдохни себе, чувак".

И народ не склонен к порче.
Он себе спокойно дрочит.
комментарии: 0 понравилось! вверх^ к полной версии
Цитата недели 07-02-2005 02:23


....Однако в 586 году до н.э. Навуходоносор захватил Иерусалим, разрушил храм и переселил значительную часть населения в Вавилон. Вавилонское царство пало в 538 году до н.э., когда Вавилон был взят Киром, царем мидян и персов. В 537 году до н.э. Кир обнародовал закон, разрешавший евреям вернуться в Палестину. Многие евреи (ими предводительствовали Неемия и Ездра) возвратились; храм был отстроен заново, и с этого времени начался процесс выкристаллизовывания еврейской ортодоксии.(выделено мною - okey)В период пленения, а также на протяжении некоторого времени до и после этого периода еврейская религия претерпела целый ряд весьма важных изменений. Первоначально израильтяне и окружающие их племена, по-видимому, мало чем отличались друг от друга в религиозном отношении. <Тетраграмматон> на первых порах почитался лишь как племенной бог, покровительствовавший детям израилевым, но при этом не отрицалось существование и других богов, и их почитание было обыденным явлением. Когда первая заповедь предписывает: "Да не будет у тебя других богов пред лицем Моим", – то этим высказывается нечто совершенно новое для времени, непосредственно предшествовавшему пленению. Это со всей очевидностью вытекает из различных текстов ранних пророков. Пророки и стали в это время впервые учить, что почитание языческих богов является грехом. Они утверждали, что для завоевания победы в многочисленных войнах того времени надо заручиться покровительством <Тетраграмматон>; а <Тетраграмматон> лишит евреев своего покровительства, если они будут почитать также и других богов. Главными творцами идеи, что все религии, кроме одной, ложны и что Господь карает идолопоклонство, были, по-видимому, Иеремия и Иезекииль.
Б. Рассел. История западной философии
комментарии: 0 понравилось! вверх^ к полной версии
01.02.2005. Краткое содержание 02-02-2005 02:13



1. Colgate,
2. Danone, Nescafe,
3. Renault, Marlboro,
4. IBM, Microsoft,
5. McDonalds, Marlboro,
6. Microsoft, Microsoft, Microsoft,
7. Renault,
8. Sharp, Marlboro, Sony Wega,
9. Colgate
Последнего пункта не хватает. Когда там будет стоять 10. Durex - пpийдется подумать о перeстройке жизни.
комментарии: 0 понравилось! вверх^ к полной версии
Защита собственных ресурсов - Demand() 02-02-2005 00:01


Предыдущие два lab'a были посвящены защите вызывающего кода (caller), - теперь мы перейдем к защите вызываемого (callee). Затетим, прежде всего, что сам по себе код не стоит защищать - речь идет о защите ресурсов, доступ к которым осуществляется посредством кода. Какие это могут быть ресурсы? Connections, поиск(!), и тем более, изменения в ADSI, чтение и запись файлов, достун в EventLog, доступ вообще в registry и проч. и проч. Каждый такой ресурс имеет соответствующий SecurityPermission class. Не стоит переписывать framework -  прежде чем писать свой SecurityPermission implementation, или просто защищать свой код вызовами Demand() - помним о правиле Хамурапи - вкладывать нужно туда, где до тебя еще не строили. Поэтому в этот раз мы не будем изoбретать колесо, (как бы мне ни хотелось все-таки добраться до IStackWalk), а попытаемся увидеть применения Demand() в повседневной практике программиста.
комментарии: 0 понравилось! вверх^ к полной версии
Labs plan 30-01-2005 02:24


Lab 1. PermitOnly()


Scenario : despite the external assembly has been granted the permissions (by policy config file) to call SqlConnection.Open(),such the attempt is failed because calling assembly want to restrict the caller notwithstanding policy.


1.1.1). Preparing policy config file : Create CodeGroup with URLMembershipCondition that points to the folder with assemlby to be loaded


1.1.2) Create PermissionSet includeing 2 permissions - SecurityPermission with Assertion and Execution flags and unrestricted SqlClientPermission .This will grant the assembly to be loaded the SQLConnection.Open() permissions


1.2) Load and invloke the external assembly


1.2.1). External assembly is loaded (LoadFrom) by codebase. Its evidence established and captured


Assembly assm = Assembly.LoadFrom(codebase);


Evidence evidence = assm.Evidence;


1.2.2). Policy loaded from .config file at AppDomain level. The evidence of the loaded assembly is resolved thru the policy returning "effective permission set" for this AppDomain for loaded assembly.


PolicyLevel polLevel = SecurityManager.LoadPolicyLevelFromFile(@"folknote.config", PolicyLevelType.AppDomain);


PolicyStatement statement = polLevel.Resolve(evidence);


PermissionSet ps = statement.PermissionSet;


1.3) Construct the required permission set (for Execution only)


IPermission perm = new SecurityPermission(SecurityPermissionFlag.Execution);


PermissionSet requiredPS = new PermissionSet(PermissionState.None);


requiredPS.AddPermission(perm);


1.3.1) Check if loaded asembly has been granted required Execution permissionsbool bRes = requiredPS.IsSubsetOf(ps);


1.4) Enable further running only under permitted permissions!requiredPS.PermitOnly();


1.5.1) Compile and run. Check the security exception is raised.


1.5.2) Remove the PermitOnly() call from caller. Run once again - no security exception is raised this time.


Note: security check is lazy as possible. You was eble to create new SqlConnection object but actual invocation is only checked when you call SqlConnection.Open() method.


Lab 2. Assert()


В прошлом lab'е создалась довольно абсурдная ситуация : несмотря на то, что loaded assembly has been explicitly (by policy config) granted SqlClientPermission, it was failed to actually invoke Open() method! Почему это абсурд? Потому, что с одной стороны, host, кот. хочет to tune permissions, seems to be able to ignore policy settings. From other hand, it's the primary goal of the policy files - to tune security declaratively! Such kind of absurd решается с помощью Assert().Вызывая Assert(), client states  that it willing to restrict the stack walk upstream, till existing [bp]. Философски выражаясь, это можно сформулировать примерно так: я уважаю ограничения, высталенные by callers, но я все-таки хочу вызвать то, что мне надо; пусть же нас рассудит policy. А policy рассуждает так: с одной стороны, у callee есть permissions на вызов - надо бы разрешить, с другой стороны - сам caller поставил PermitOnly(), значит у него были какие-то причины? Поэтому поищем среди permissions callee - SecurityPermissions.Assert (see lab1): если стоит - разрешить Assert() и сам вызов, разумеется; если нет - администратор, видимо, лучше знает.


2.1) Insert Assert invocation into callee code:


SqlClientPermission perm = new SqlClientPermission(PermissionState.Unrestricted);


perm.Assert();


2.2) Compile, run and see success invlocation of SqlConnection.Open()


2.3) Remove Assertion from Permission section of desired PermissionSet. Run and see SecurityException raised.


Вывод: всегда включайте в код своих assemblies Assert() - пусть администратор policy сам разбирается.


Lab 3.Demand()


Lab 4.Deny()

комментарии: 0 понравилось! вверх^ к полной версии