Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Web Services »

Обсудить на форуме Обсудить на форуме

Создание собственной исследовательской библиотеки в Office 2003 с помощью Google Web Service API
Автор рассматривает создание исследовательской библиотеки (research library), интересного нового средства Microsoft Office 2003, позволяющего легко исследовать внешние ресурсы из Office.

Аннотация

Автор рассматривает создание исследовательской библиотеки (research library), интересного нового средства Microsoft Office 2003, позволяющего легко исследовать внешние ресурсы из Office.

Скачать GoogleResearchLibrarySource.exe.

Примечание Информация в этой статье основана на Office 2003 Beta 2. Как всегда, она может измениться. Я приложил все усилия к тому, чтобы сосредоточиться на том, что с наибольшей вероятностью останется неизменным к началу поставок продукта.

В своей последней статье What´s New with Smart Tags in Office 2003 я рассмотрел новые возможности смарт-тэгов в Office 2003. Я был рад получить массу позитивных откликов, полных энтузиазма по поводу следующей версии Microsoft Office, официально названной Microsoft Office 2003. Многим читателям не терпится заполучить эту программу в свои руки. Мой совет - почаще заглядывайте на Office Developer Center, чтобы узнать, как получить вторую бета-версию.

Я уже давно работаю с бета-версиями и могу сказать, что новая версия ожидается весьма впечатляющей. Даже не знаю, с чего начать. Новые функции будут полезны пользователям, корпорациям и ISV. Это так замечательно, что несколько месяцев я посвящу обзору новых средств и, что важнее, типов решений, которые стали возможными в Microsoft Office 2003.

Введение в исследовательскую библиотеку

В этом месяце я хочу рассказать о тайном сокровище (во всяком случае, я так считаю) Microsoft Office 2003 - об исследовательской библиотеке (research library). Поскольку в Office 2003 много других замечательных средств, этой библиотеке особого внимания не уделяли. Она доступна в новых версиях Microsoft Word, Microsoft Excel, Microsoft PowerPoint®, Microsoft Outlook®, Microsoft Publisher, Microsoft OneNote™ и Internet Explorer. Во всех этих приложениях исследовательская библиотека доступна в виде секции задач (task pane).

Что такое исследовательская библиотека? Как и следует из ее названия, это встроенный инструмент для исследований, позволяющий искать информацию из Office в самых разнообразных источниках. Некоторые источники есть в Office, другие являются внешними сервисами, для использования которых требуется соединение с Интернетом. На рис. 1 показана работа встроенного тезауруса английских слов.

Рис 1. Секция задач Research в Microsoft Word 2003

В секции задач Research можно выделить следующие элементы.

  1. В большинстве поддерживаемых приложений для доступа к исследовательской библиотеке достаточно щелкнуть кнопку Research на панели инструментов Standard. Кроме того, для доступа к секции задач Research можно открыть секцию задач (View | Task Pane) и выбрать Research из списка доступных секций.
  2. После того как секция задач Research открыта, введите текст для поиска в поле Search for. Дополнительно пользователь может щелкнуть текст в документе, одновременно удерживая клавишу ALT в нажатом состоянии. Тогда приложение Office открывает секцию задач и помещает текст в поле Search for.
  3. Затем выберите сервис исследований из списка сервисов. Далее в этой статье я расскажу о некоторых сервисах. И наконец, щелкните кнопку Go (зеленую со стрелкой), чтобы запустить поиск.
  4. Секция задач Research содержит кнопки Back и Forward, аналогичные таким же кнопкам браузеров и позволяющие переходить к результатам предшествующих операций поиска.
  5. Секция задач Research выводит результаты поиска. В одной операции поиска можно задействовать несколько сервисов, результаты разделяются заголовком, содержащим имя сервиса.
  6. Секция задач Research поддерживает самые разнообразные способы управления результатами. На рис. 1 приведено раскрывающееся меню, которое позволяет вставить или скопировать выделенный текст в текущий документ.
  7. В самом низу секции задач Research находится ссылка Research options. Она открывает диалоговое окно Research Options, показанное на рис. 2.

Рис. 2. Диалоговое окно Research Options для настройки сервисов исследований, вызываемых из Office

Диалоговое окно Research Options используется для добавления новых сервисов исследований, обновления существующих, изменения параметров контроля за действиями детей (Parental controls), а также просмотра свойств установленных сервисов. Как видно из рис. 2, Office 2003 Beta 2 поставляется с набором сервисов исследований. Некоторые из них перечислены ниже.

  • Локальные источники на компьютере:
    • тезаурус и перевод;
  • Сервисы исследований Office 2003:
    • словарь;
    • энциклопедия;
    • Web-поиск;
    • котировки акций;
  • Сервисы исследований от третьих фирм:
    • Factiva;
    • eLibrary;
    • Gale;
    • WorldLingo;
    • прочие.

Большинству из этих сервисов требуется соединение с Интернетом. Если пользователь не подключен, некоторые сервисы окажутся недоступны. Требующие соединения сервисы предназначены для получения актуальной информации из многих полезных источников в Web. Один из моих самых любимых - сервис исследований MSN Money Stock Quotes. На рис. 3 показаны результаты поиска по бегущей строке котировок на MSFT.

Рис. 3. Пример использования сервиса исследований MSN Money Stock Quotes

Сравнив результаты, приведенные на рис. 1 и рис. 3, иллюстрирующие два сервиса, вы оцените гибкость вывода различных типов данных. MSN Money Stock Quotes выводит отформатированную таблицу, гиперссылки, открывающие Web-сайт MSN, и кнопку Insert Stock Price. Последняя на самом деле смарт-тэг. Секция задач Research может использовать операции, поддерживаемые установленными смарт-тэгами, для расширения возможностей взаимодействия между секцией Research и приложением Office. В данном случае MSN Money Stock Quotes вставляет текущую биржевую цену или отформатированную таблицу с текущей статистикой биржевых котировок.

Создание собственной исследовательской библиотеки

А теперь самое замечательное - секция задач Research расширяема. Microsoft будет поставлять Office Research Software Developers Kit вместе с Beta 2 и окончательной версией продукта. Таким образом, разработчики смогут интегрировать продукты третьих фирм и внутреннюю системную информацию, а ISV, кроме того, - встраивать свои продукты в среду Microsoft Office.

В остальной части статьи я рассмотрю основы создания сервиса исследовательской библиотеки. Пример основан на Google Web API - наборе Web-сервисов XML, позволяющих разработчику запрашивать более трех миллиардов Web-документов прямо из приложения. В нашем случае мы будем запрашивать Google из секции задач Research. Подробнее об использовании Google Web API см. http://www.google.com/apis/.

Каков сценарий работы с сервисом исследовательской библиотеки, обращающегося к Google? Я часто запускаю Internet Explorer и ищу в Google информацию по ключевым словам, которые беру из своего документа или почтового сообщения. Теперь я могу выполнять поиск прямо из Office, используя код, рассматриваемый далее. Я щелкаю кнопкой мыши на каком-то слове (или словах) в сообщении, удерживая клавишу ALT в нажатом состоянии. Открывается секция задач Research с моим текстом, уже введенным в поле Search for. После этого я вызываю сервис Google Web Search и щелкаю Go. После этого секция задач Research выводит результаты поиска. Я могу щелкнуть на одном из результатов, и Web-сайт загрузится в браузере. На рис. 4 представлено окно исследовательской библиотеки Google Web Search.

Рис. 4. Окно исследовательской библиотеки Google Web Search

В материалы для скачивания к этой статье включен сервис исследовательской библиотеки Google Web Search, протестированный в Office 2003 Beta 2. Он предлагается в двух версиях: одна - на C#, другая - на Visual Basic® .NET. Помимо синтаксиса, они абсолютно идентичны. Интересно, что сначала я написал его на C#, а затем преобразовал в Visual Basic .NET. Это заняло у меня около 10 минут, что наглядно демонстрирует, насколько легко переходить с языка на язык. Чтобы не раздувать объем статьи, я в основном привожу примеры на C#.

И наконец, чтобы обращаться к сервисам Google Web API, вам потребуется создать учетную запись Google и получить бесплатный лицензионный ключ. Учетная запись Google и лицензионный ключ позволяют выполнять до 1000 автоматизированных запросов в день. Запросить ключ можно по ссылке http://www.google.com/apis/. Весь процесс занимает пару минут. Затем в зависимости от используемого языка программирования откройте web.config и измените нестандартное свойство GoogleKey. Ниже перечислены каталоги и языки.

<<Каталог с распакованными файлами>>\GoogleResearchLibraryCSharp - C#-версия
<<Каталог с распакованными файлами>>\GoogleResearchLibraryVBNet - VB.NET-версия

Поместите лицензионный ключ, выданный Google, в атрибут value:

<add key="GoogleKey" value="[INSERT YOUR KEY HERE - SEE README]"/>

Например, измененный XML-узел может выглядеть так:

<add key="GoogleKey" value="abc123ThisIsAMadeUpKeyxyz/abc"/>

Дополнительные сведения об установке см. в файле README.DOC.

Основы архитектуры исследовательской библиотеки

Исследовательская библиотека состоит в основном из Web-сервиса XML с двумя Web-методами. В этом ее отличие от многих других моделей расширения Office. Ранее расширения Office зачастую требовали установки кода на клиентской стороне. Сервис исследовательской библиотеки - стандартный Web-сервис XML, не требующий кода на клиентской стороне за исключением тех случаев, когда применяются смарт-тэги (что совершенно не обязательно, во многих библиотеках они не нужны). Используя Visual Studio® .NET или другую платформу, поддерживающую Web-сервисы XML, вы создаете набор Web-сервисов, которые выполняются на сервере и взаимодействуют с Office через предопределенные интерфейсы. На рис. 5, взятом из Office Research SDK, показано, как взаимодействуют Office и Web-сервис XML исследовательской библиотеки.

Рис. 5. Взаимодействие между Office и Web-сервисом XML исследовательской библиотеки

{
Надписи на рисунке:
RegistrationQuery schema - Схема RegistrationQuery
RegistrationResponse schema - Схема RegistrationResponse
QueryPacket schema - Схема QueryPacket
Response schema - Схема Response
Office - Office
Research Service - Сервис исследований
}

  1. Пользователь щелкает кнопку Add Service диалогового окна Research Options (рис. 2). Он указывает ссылку на страницу регистрации сервиса исследовательской библиотеки. Страница регистрации содержит Web-метод Registration().
  2. Registration() возвращает сведения о провайдере сервиса, тип сервиса, а также его категорию и указатель на Web-метод Query(), используемый для поиска. Теперь сервис готов к использованию.
    Примечание Вам может показаться, что здесь слишком много работы возложено на пользователя, которому не обязательно захочется возиться с добавлением сервиса. Для решения этой проблемы есть два пути: (1) предусмотреть установочный файл, создающий требуемые записи в реестре для исследовательской библиотеки или (2) задействовать встроенный в Office механизм обнаружения для добавления и обновления сервисов исследовательских библиотек. Когда организация развертывает Office 2003, в программу установки можно включить указатель, позволяющий обнаруживать Web-сервисы XML. Это позволяет добавлять новые сервисы, не требуя никаких действий от пользователя.
  3. Пользовательские запросы посылаются от исследовательской библиотеки Web-методу Query() сервиса.
  4. Последний разбирает запрос и формулирует ответ, который посылается обратно Office. Приложение Office выводит результаты.
    Взаимодействие между Office и Web-сервисом XML должно удовлетворять набору XML-схем, определенных в Office Research SDK. Например, пакет ответа на регистрацию, основанный на схеме ответа, может выглядеть так:
    <?xml version="1.0" encoding="utf-8"?>
    <ProviderUpdate xmlns="urn:Microsoft.Search.Registration.Response">
        <Status>SUCCESS</Status>
        <Providers>
        <Provider>
            <Message>This is a sample research library </Message>
            <Id>{9FF837AF-34D6-4a94-BB52-B0F19F3A343A}</Id>
            <Name>OfficeZealot.com</Name>
            <QueryPath>
            http://localhost/googleresearchlibrarycsharp/Query.asmx
            </QueryPath>
            <RegistrationPath>
            http://localhost/googleresearchlibrarycsharp/registration.asmx<
            </RegistrationPath>
            <AboutPath/>
            <Type>SOAP</Type>
            <Services>
                <Service>
                <Id>{CD144577-9D90-4144-AE38-0D6553CA4004}</Id>
                <Name>Google Web Search (CSharp)</Name>
                <Description>Google Web Service research library</Description>
                <Copyright>All content Copyright OfficeZealot.com (c) 
                2003.</Copyright>
                <Display>On</Display>
                <Category>RESEARCH_GENERAL</Category>
                </Service>
            </Services>
        </Provider>
        </Providers>
    </ProviderUpdate>
    

    Эти данные передаются пользователю при установке сервиса исследовательской библиотеки. Кроме того, в них содержатся сведения, необходимые Office для взаимодействия с сервисом на удаленном сервере.

Более глубокое изучение Web-сервиса XML

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

  1. Файл Registration.asmx для Web-метода Registration().
  2. Файл TheQuery.asmx для Web-метода Query().

Office ожидает, что ответы Web-методов подчиняются схемам библиотеки исследований и связанным с ними пространствам имен. Таким образом, для каждого Web-сервиса нужно определить подходящее пространство имен для ответа, а именно urn:Microsoft.Search. В C# при определении Web-сервиса используется следующий атрибут:

[WebService(Namespace="urn:Microsoft.Search")]

В Visual Basic .NET:

<WebService(Namespace:="urn:Microsoft.Search")>

Эта конструкция указывает .NET Framework заключить тела SOAP-ответов в пространство имен urn:Microsoft.Search.

Далее приведен код на C# для Web-метода Registration(), хранящегося в файле Registration.asmx.cs

[WebMethod(CacheDuration=86400)] // кэшировать на весь день,
                                 // так как данные изменяются редко
                                 // (86400 секунд = 24 часам)
public string Registration(string registrationxml)
{
    string physicalPath = 
        HttpContext.Current.Server.MapPath(".").ToString();
    string httpPath = 
        ConfigurationSettings.AppSettings["ServerPath"]  
        + HttpContext.Current.Request.ApplicationPath + "/";

    XmlDocument registrationResponse = new XmlDocument();
    registrationResponse.Load(physicalPath + 
    "\\RegistrationResponse.xml");
           
    XmlNamespaceManager nsm = 
        new XmlNamespaceManager(registrationResponse.NameTable);
    nsm.AddNamespace("ns", "urn:Microsoft.Search.Registration.Response");

    registrationResponse.SelectSingleNode("//ns:QueryPath", nsm).InnerText = 
        httpPath + "Query.asmx";
    registrationResponse.SelectSingleNode("//ns:RegistrationPath", 
        nsm).InnerText =  httpPath + "Registration.asmx";
    registrationResponse.SelectSingleNode("//ns:AboutPath", nsm).InnerText =
        httpPath + "about.asmx";

    return registrationResponse.InnerXml.ToString();
}

Ответ на регистрацию достаточно прост, так как он лишь содержит сведения о сервисе исследовательской библиотеки. Код загружает локальный XML-файл RegistrationResponse.xml, служащий общим шаблоном для ответа, и вставляет в него дополнительные элементы, определяемые на этапе выполнения. Все это возвращается Office.

Ниже приведен код Web-метода Query() и одной из его зависимых закрытых функций:

[WebMethod(CacheDuration=3600)]  // кэшировать на 1 час
public string Query(string queryXml)
{
    // Проверить, задано ли значение для запроса
    if (queryXml.Length == 0)
        return "";

    string queryString;
    string applicationName;
    int startAt = 1;

    XmlDocument requestXml = new XmlDocument();
    try
    {
        requestXml.LoadXml(queryXml.ToString());

        XmlNamespaceManager nsmRequest = 
            new XmlNamespaceManager(requestXml.NameTable);
        nsmRequest.AddNamespace("ns", "urn:Microsoft.Search.Query");
        nsmRequest.AddNamespace("oc", 
           "urn:Microsoft.Search.Query.Office.Context");

        queryString = requestXml.SelectSingleNode("//ns:QueryText", 
             nsmRequest).InnerText;
        applicationName = requestXml.SelectSingleNode("//oc:Name", 
            nsmRequest).InnerText;
        try
        {
            startAt = Convert.ToInt32(requestXml.SelectSingleNode("//ns:StartAt", 
                nsmRequest).InnerText.ToString());
        }
        catch
        {
            startAt = 1;
        }
    }
    catch
    {
        // Разбор queryXML не удался,
        // использовать входную строку для поиска в Google
        queryString = queryXml;
    }
                
    XmlDocument responseWrapper = new XmlDocument();
    try
    {
        responseWrapper.Load(physicalPath + "\\ResponseWrapper.xml");
    }
    catch
    {
        // Нельзя разобрать оболочку ответа, вернуть пустую строку
        return "";
    }
    XmlNamespaceManager nsmResponse = 
        new XmlNamespaceManager(responseWrapper.NameTable);
    nsmResponse.AddNamespace("ns", "urn:Microsoft.Search.Response");

    responseWrapper.SelectSingleNode("//ns:Range",nsmResponse).InnerXml = 
        QueryGoogle(queryString, startAt);
    return responseWrapper.InnerXml.ToString();
}

private string QueryGoogle(string queryString, int startAt)
{
    StringWriter queryResponse = new StringWriter();
    XmlTextWriter writer = new XmlTextWriter(queryResponse);

    GoogleSearchService search = new GoogleSearchService();
    try 
    {
        // Вызвать поисковый метод
        GoogleSearchResult results = 
            search.doGoogleSearch(ConfigurationSettings.AppSettings["GoogleKey"] , 
            queryString, startAt, PageCount, true, "", true, "", "", "");

        // Элементы для ссылок Previous | Next
        writer.WriteElementString("StartAt",startAt.ToString());
        writer.WriteElementString("Count",PageCount.ToString());
        writer.WriteElementString("TotalAvailable", 
            results.estimatedTotalResultsCount.ToString());

        // Начало элемента Results
        writer.WriteStartElement("Results");
        // Начало элемента Content
        writer.WriteStartElement("Content", 
            "urn:Microsoft.Search.Response.Content");

        // Вставить изображение
        writer.WriteStartElement("Image");
        writer.WriteAttributeString("source", httpPath + "/gLogo.gif");
        writer.WriteEndElement();

        foreach(ResultElement result in results.resultElements)
        {
            writer.WriteStartElement("Heading");
            writer.WriteAttributeString("collapsible","true");
            
            if (result.title.Length> 0)
                writer.WriteElementString("Text", 
                    StripHtml(result.title).Trim());
            else
                writer.WriteElementString("Text", "No Title");

            if (result.snippet.Length > 0)
                writer.WriteElementString("P",
                    StripHtml(result.snippet));

            if (result.summary.Length>0)
            {
                writer.WriteStartElement("P");
                    writer.WriteStartElement("Char");
                    writer.WriteAttributeString("light", "true");
                    writer.WriteString("Description: ");
                    writer.WriteEndElement();
                    writer.WriteString(StripHtml(result.summary));
                writer.WriteEndElement();
            }

            writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", result.URL);
            writer.WriteElementString("Text", result.URL);
            writer.WriteEndElement();

            writer.WriteEndElement(); // заголовок
        }

        writer.WriteElementString("HorizontalRule","");
        writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", 
                "http://www.google.com/search?q=" + queryString);
            writer.WriteElementString("Text", 
                "Continue your search at Google.com ...");
        writer.WriteEndElement();
        writer.WriteStartElement("Hyperlink");
            writer.WriteAttributeString("url", 
                "http://groups.google.com/groups?q=" + queryString);
            writer.WriteElementString("Text", 
                "Search at groups.Google.com ...");
        writer.WriteEndElement();
        // Анализ результатов поиска
        writer.WriteElementString("P", "Search took " + 
            Math.Round(results.searchTime,2).ToString() + " seconds.");
        writer.WriteElementString("HorizontalRule","");
        writer.WriteStartElement("Image"); // вставить изображение
                                           // логотипа OZ
        writer.WriteAttributeString("source", httpPath + "/oz15owide.gif");
        writer.WriteEndElement();

        writer.WriteEndElement(); // закрыть элемент Content
        writer.WriteEndElement(); // закрыть элемент Content

        writer.Close();

        return queryResponse.ToString();
    }
    catch (System.Web.Services.Protocols.SoapException ex) 
    {
        return "";
    }
}

Когда пользователь запрашивает информацию с помощью секции задач Research, запрос упаковывается в соответствии со схемой для запроса. Затем данные передаются Web-методу Query() в параметре queryXml. Метод извлекает строку для поиска из queryXml и передает ее функции QueryGoogle(), в которой и выполняется основная работа. Она вызывает Google Web Service API, передавая поисковую строку. Затем разбирает ответ от Google и упаковывает его в соответствии со схемой ответа исследовательской библиотеки. Ниже в качестве примера приведен XML-пакет, соответствующий ответу на рис. 4.

<?xml version="1.0" encoding="utf-8"?>
<ResponsePacket revision="1" xmlns="urn:Microsoft.Search.Response">
<Response domain="{CD144577-9D90-4144-AE38-0D6553CA4004}">
    <Range>
        <StartAt>1</StartAt>
        <Count>2</Count>
        <TotalAvailable>738</TotalAvailable>
        <Results>
        <Content xmlns="urn:Microsoft.Search.Response.Content">
            <Image source="http://localhost/GoogleResearchLibraryCSharp//gLogo.gif"/>
            <Heading collapsible="true">
            <Text>Smart Solutions Opinion</Text>
            <P>Office as Swiss Army Knife. Chris Kunicki.. </P>
            <Hyperlink url="http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A">
                <Text>http://www.msofficemag.net/opinion/default.asp?sort=W&Ord=A</Text>
            </Hyperlink>
            </Heading>
            <Heading collapsible="true">
            <Text>What´s New with Smart Tags in Office 11</Text>
            <P>Rate this page: 4 users, 3.8 out of 5. Read User ... </P>
            <Hyperlink url="http://msdn.microsoft.com/columns/office.asp">
                <Text>http://msdn.microsoft.com/columns/office.asp</Text>
            </Hyperlink>
            </Heading>
            <HorizontalRule/>
            <Hyperlink url="http://www.google.com/search?q=Chris Kunicki">
            <Text>Continue your search at Google.com ...</Text>
            </Hyperlink>
            <Hyperlink url="http://groups.google.com/groups?q=Chris Kunicki">
            <Text>Search at groups.Google.com ...</Text>
            </Hyperlink>
            <P>Search took 0.19 seconds.</P>
            <HorizontalRule/>
            <Image source="http://localhost/GoogleResearchLibraryCSharp//oz15owide.gif"/>
        </Content>
        </Results>
    </Range>
    <Status>SUCCESS</Status>
    </Response>
</ResponsePacket>

Query.asmx интенсивно использует объект XMLTextWriter. Он предоставляет эффективный и простой способ создания синтаксически корректного XML-документа. Так как ответ от интерфейса Query основан на XML-схеме, необходим корректный XML-документ, иначе секция задач Research с большой долей вероятности выведет пустое окно. Следующий пример иллюстрирует применение объекта XMLTextWriter:

writer.WriteStartElement("P");
writer.WriteStartElement("Char");
writer.WriteAttributeString("light", "true");
writer.WriteString("Description: ");
writer.WriteEndElement();
writer.WriteString(StripHtml(result.summary));
writer.WriteEndElement();

Что приводит к созданию следующего XML:

<P><Char light="True">Description: information from google</Char></P>

На первый взгляд кажется, что создание простой XML-строки потребовало слишком много кода. Однако типичный пакет ответа содержит 50-100 строк XML. И им уже довольно неудобно управлять с помощью обычных строковых функций. Объект XMLTextWriter не только эффективнее расходует память, но и проще в создании и управлении.

Заметки из окопов

Как вы понимаете, мы рассмотрели лишь вершину айсберга. Будучи одним из первых пользователей этой технологии, хотел бы в заключение поделиться своим опытом в создании секции задач Research.

Здесь многое напоминает HTML, так как исследовательская библиотека - это ответ Web-сервиса, форматированный в виде XML-структуры, определяемой Microsoft. Мне потребовалось около двух дней на изучение схем, чтобы почувствовать себя уверенно. Хотя секция задач Research Library выглядит как встроенный браузер, она не обладает его гибкостью. Задать фоновый цвет нельзя, у вас весьма ограниченный контроль над разметкой текста и изображений, нет сценариев, которые можно было бы выполнять на клиентской стороне. Но даже при таких ограничениях, как только вы поймете возможности синтаксиса, вы обнаружите, что он позволяет делать очень многое.

Еще одна интересная вещь. Вам придется научиться работать с экраном ограниченного размера. Обычно вы имеете дело с областью шириной 100-200 пикселов. То есть придется экономить место. В принципе, это сравнимо с форматированием текста для PDA аналогичного форм-фактора.

Выгода от использования .NET Framework для Web-сервисов XML заключается в мощной встроенной поддержке кэширования. Добавив следующий атрибут к Web-методу Response(), мы обеспечим кэширование редко изменяющегося ответа на регистрацию:

[WebMethod(CacheDuration=86400)] // кэшировать на весь день,
                                 // так как данные изменяются редко
                                 // (86400 секунд = 24 часам)
public string Registration(string registrationxml)

Я также применил этот атрибут к методу Query() и установил срок кэширования в один час, как показано в коде:

[WebMethod(CacheDuration=3600)]  // кэшировать на 1 час
public string Query(string queryXml)

Как отлаживать исследовательскую библиотеку? Опять же, ее отладку полезно сравнить с отладкой HTML в браузере, только в нашем случае браузер - это клиент Office. Установите точки прерывания в Web-методах, которые вы хотите отладить, и запустите проект с включенной отладкой. Visual Studio .NET запустит экземпляр Internet Explorer и переведет код в режим отладки. Оставьте окно Internet Explorer открытым и переключитесь в тестируемое приложение Office. По мере выполнения запросов в исследовательской библиотеке Visual Studio .NET будет останавливаться на точках прерывания.

И наконец, несколько бессвязных замечаний:

  • исследовательская библиотека поддерживает сбор более обширной информации за счет синтаксиса форм;
  • защищенные соединения поддерживаются по https://;
  • исследовательская библиотека поддерживает аутентификацию через Windows;
  • поддержка cookie:
  • можно записывать cookie, распознаваемые браузером;
  • постоянные cookie используются совместно с Internet Explorer.

 


Крис Куницки (Chris Kunicki) работает с заказчиками, архитекторами и инженерами над созданием впечатляющих настольных, корпоративных и Web-приложений в OfficeZealot.com. Крис давно и с энтузиазмом занимается разработкой под Office и пропагандирует его важность как платформы для создания решений. С ним можно связаться по адресу chris@officezealot.com. Кроме того, вы можете познакомиться с его точкой зрения на сайте http://www.officezealot.com.


Может пригодится:


Автор: Крис Куницки
Прочитано: 3787
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру