четверг, 10 октября 2013 г.

Вызов веб-сервиса MDS из SharePoint 2013. Имперсонализация.

Веб-сервис обычно MDS настраивается при включенной имперсонализации, и метод аутентификации - windows. Однако из SharePoint вызов кода веб-сервиса происходит от имени IUSR. Чтобы заставить веб-сервис выполняться от имени той учетной записи, под которой пользователь зашел на SharePoint необходимо сделать следующие 2 вещи:

1. Включить службу  Claims To Windows Token Service
2. В коде сделать логон под требуемой учеткой.

Служба стартуется из Центра администрирования SharePoint 2013

System Settings -> Manage Services on server -> Claims To Windows Token Service -> Start

 



Далее необходимо добавить в проект утилиту (взято отсюда)

 
   public class Utility
    {
        public static WindowsIdentity GetWindowsIdentityFromClaimsToken()
        {
            WindowsIdentity wi = null;

            // Run this portion of code as application pool account, so that C2WTS service is called as this account
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                // Get the UPN value of the user from the UPN claim type
                Microsoft.IdentityModel.Claims.IClaimsIdentity identity = ((Microsoft.IdentityModel.Claims.ClaimsIdentity)Thread.CurrentPrincipal.Identity as Microsoft.IdentityModel.Claims.IClaimsIdentity);
                string upn = null;
                foreach (Microsoft.IdentityModel.Claims.Claim claim in identity.Claims.Where(claim => StringComparer.Ordinal.Equals(ClaimTypes.Upn, claim.ClaimType)))
                {
                    upn = claim.Value;
                }

                if (upn == null)
                {
                    throw new Exception(string.Format("Cannot Impersonate {0} since he doesn't have a UPN in his claims", Thread.CurrentPrincipal.Identity.Name));
                }

                // Get a WindowsIdentity from the UPN of the user by calling C2WTS service
                try
                {
                    wi = Microsoft.IdentityModel.WindowsTokenService.S4UClient.UpnLogon(upn);
                }
                catch (System.Exception ex)
                {
                    throw new Exception(string.Format("Impersonation failed. Message: {0}", ex.Message));
                }
            });

            return wi;
        }
    }


Далее можно вызывать методы веб-сервиса:

   
            using (WindowsImpersonationContext ctxt = Utility2.GetWindowsIdentityFromClaimsToken().Impersonate())
            {
                ServiceReference.ServiceClient = client = new ServiceReference.ServiceClient();
                var resultOptions = new MetadataResultOptions();
                resultOptions.Models = ResultType.Identifiers;
                var criteria = new MetadataSearchCriteria();
                criteria.SearchOption = SearchOption.UserDefinedObjectsOnly;

                OperationResult result;
                var models = _client.MetadataGet(new International(), resultOptions, criteria, out result); 
            }

пятница, 10 мая 2013 г.

От чего проваливаются проекты.



Проект по миграции SharePoint 2007 до 2010, может затянулся и на год.

Реплика руководителя Отдела  управления проектами Василия Дайчасовского.

"Так как информация о нашем Проект Миграции и особенно о его результатах дошли до самого верха, то нам предстоит объяснить, как же все так вышло, что нам потребовалось более года на натягивание нового дизайна, перенос 4х сервисов и устранения тьмы наших же ошибок."

Мнение ведущего аналитика проекта.

1.    Проект по миграции портала изначально был поставлен за рамки методологии Microsoft по миграции портала. Что предполагало определённые риски, которые не были учтены.
2.    Не было до конца согласованно и подписано ТЗ.
3.    Отсутствие у Заказчика детальных требований к проекту.
4.    Отсутствие у Заказчика ТЗ на существующие модули системы, созданные ранее текущего проекта.
5.    С менеджером проекта со стороны Заказчика были изначально зафиксированы некие договорённости по реализации проекта. После чего со стороны Заказчика произошла смена менеджера проекта, что повлекло за собой:
a.    Большой срок введения в проект нового менеджера проекта Заказчика;
b.    Формирование нового видения результатов проекта со стороны Заказчика;
c.    Формирование новых требования для Исполнителя по проекту со стороны Заказчика;

6.    Бессрочный этап тестирования системы Заказчиком.

Мнение начальника отдела внедрения Александра Внедряйкина.

1.    Отсутствовал проект по миграции портала, была работа в рамках годовой технической поддержки.
2.    В рамках техподдержки была первоначально достигнута договоренность провести миграцию портала поверх старого «как есть» - т.е. стандартными средствами по стандартной методологии Microsoft, а все то, что не перенеслось автоматически, должно было перейти в дополнительный проект.
3.    На каком то этапе переговоров первоначальная договоренность была изменена и было решение не мигрировать портал, а создать новый, в котором создать 4 сервиса и перенести несколько библиотек документов в ручную. На данную работу мы подписались с условием, что работы будут осуществляться по ТЗ.
4.    ТЗ на создание портала было написано и согласовано с менеджером проекта Заказчика. Т.к. договора на проект по миграции не было, а была работа в рамках техподдержки, то ТЗ не было официальным образом утверждено.
5.    Работы были выполнены по ТЗ в течении запланированного срока, но официальной сдачи проекта не было (т.к. и официального проекта не было)
6.    Произошла смена руководителя проекта со стороны заказчика и уволился наш сейлз менеджер ( Петр Торгашов). В итоге все договоренности неожиданно похерились
7.    Новый менеджер проекта со стороны Заказчика стал требовать функционал не по согласованному ТЗ, а в полном соответствии с функционалом старого портала (по которому не было ни документации ни кодов), интерпретировав понятие «как есть» в свою пользу.
8.    Мы каким то образом на это подписались, поскольку единственным человеком, который был в курсе договоренностей оставался я, а я на данном этапе в переговорах не участвовал.
9.    А уж далее начался полный бред и история, леденящая душу

понедельник, 21 января 2013 г.

Вопросы по T-SQL (для подготовки). Часть 1

Вопрос. Перечислете стандарты SQL в хронологическом порядке
Ответ.
SQL-86
SQL-89
SQL-92
SQL:1999
SQL:2003
SQL:2006
SQL:2008
SQL:2011

Вопрос. В чем различия между SQL и T-SQL?
SQL - это стандартный язык запросов. T-SQL - это расширенный диалект SQL, испльзующийся в продукте MS SQL SERVER.

Вопрос. На каких двух математичкеских дисциплинах основана реляционная модель?
Ответ. 1) Теория отношений, 2) Логика предикатов.

Вопрос. Назовите два аспекта в которых T-SQL отходит от реляционной модели.
Ответ. Отношение представляет собой набор неупорядоченных и уникальных структурированных записей. 1)  T-SQL таблица может не иметь, ключа идентифицирующего записи. 2) T-SQL позволяет указывать порядковые номера позиций столбцов в ORDER BY.

Вопрос. Почему не в полне корректно использовать терминиы "поле" и "запись" в реляционной модели? Какие термины корректны?
Ответ. Потому что "поле" и "record" описывают физические объекты. Правильная терминология "столбец" и "строка".

Вопрос. Почему некорректно использовть термин "значения NULL" или "NULL-значения"?
Ответ.  Потому что NULL не является значением, это просто пометка о том, что значение не определено.

Вопрос. Укажите декларативном англоподобном языке прядок следования предложеий в команде SELECT
Ответ.
1. SELECT; 2. FROM; 3. WHERE; 4. GROUP BY; 5. HAVING; 6. ORDER BY

Вопрос. Укажите логический прядок обработки предложений в команде SELECT
Ответ.
1. FROM; 2. WHERE; 3. GROUP BY; 4. HAVING; 5. SELECT; 6. ORDER BY

Вопрос. Укажите способы задания алиасов столбцов в предложении SELECT
Ответ.
1) <поле> <алиас>
2) <поле> AS <алиас>
3) <алиас> = <поле>

Вопрос. Почему нельзя обращаться к алиасам полет в предложении WHERE. Какой есть способ обойти проблему?
Ответ. Согласно логическому порядку обработки предложений, WHERE срабатывает перед SELECT, поэтому алиасы на этапе WHERE еще не известны. Выход - использовать те же имена столбцов или выражений, которые использованы в предложении SELECT.

Вопрос. Назовите отличия между WHERE и HAVING.
Ответ. Предложение WHERE выполняется перед тем как данные группируются, и выполняются для каждой строки таблицы. Предложение HAVING выполняет фильтр после того как заприси сгруппированы и применяются к каждой группе.

Вопрос. Почему не разрешается обращаться к алиасам определенных в предложении SELECT в том же предложении?
Ответ. Это запрещено специально, потому что все выражения, которые появляются на одном и том же логическом этапе концептуально выполняются одновременно. Иным словами, концептуально не доускается последовательное выполнение выражений в предложении SELECT.

Вопрос. Сформируйте правила задания "регулярных" идентификаторов для столбоцов.
Ответ. Идентификатор должен начинаться с буквы в диапазоне от A до Z (регистр не важен), с символа подчеркивания (_), со знака  (@), или решетки (#). Последующе символы могут включать буквы, цифры, знак амперсанта и знак доллара ($), решетки или подчеркивания.

Вопрос. Правила указания "нерегулярных" идентификаторов.
Ответ. Не удовлетворяющие регулярным правилам идентификаторы должны заключаться в двоыные кавычки или в квадратные скобки.