Почтовый транспорт WCF Exchange Server

Обновлен: Ноябрь 2007

Почтовый транспорт сервера Exchange Server Windows Communication Foundation (WCF) предоставляет службу, организованную по принципу очереди с использованием конечных точек на основе адресов электронной почты. Это решение позволяет приложениям .NET Compact Framework и .NET Framework размещать веб-службы и использовать их с любого компьютера, если почтовый сервер доступен.

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

WCF поддерживается в .NET Compact Framework, начиная с версии 3.5.

Эту возможность можно использовать для активации различных сценариев приложения, включая следующие.

  • Приложения, которым необходимо отсылать защищенные данные на центральный сервер и получать защищенные данные с сервера.

  • Приложения, помещающие данные с сервера предприятия в устройства вне предприятия.

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

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

  • Приложения, обнаруживающие утраченные устройства.

  • Приложения, обновляющие данные конфигурации для других приложений, помещая данные в устройство.

Почтовый транспорт WCF Exchange Server восполняет два основных ограничения удаленных устройств: адресуемость и возможность ставить данные в очередь, когда устройство отключено. Имя канала и адрес электронной почты составляют адрес конечной точки WCF. Это похоже на IP-адрес и номер порта в приложениях на основе сокетов. Адресуемость устройства обеспечивается с помощью адреса электронной почты, а адресуемость экземпляра приложения реализуется с помощью имени входного канала. Для реализации этой схемы адресации используется протокол WS-Adressing.

Постановка данных в очередь поддерживается с помощью локального хранилища данных в устройствах Windows Mobile. Общие сведения об очередях WCF см. в разделе Queues Overview.

Приложения, основанные на почтовом транспорте WCF Exchange Server, могут использовать базовые возможности WCF. WCF предоставляет унифицированную модель программирования для различных протоколов и транспортов и разделяет логику приложения от конечной точки WCF. Эта модель программирования дает несколько преимуществ, включая поддержку различных сетей, таких как General Packet Radio Service (GPRS), Wi-Fi и других, предоставляющих доступ к почтовому серверу. Разработка приложений с использованием почтового транспорта WCF Exchange Server похожа на разработку приложений с использованием каналов WCF, например, канала HTTP.

Требования

Сервером электронный почты для приложений на основе почтового транспорта WCF является Exchange Server 2007. Пакет обновления Exchange Server (SP1) предоставляет административную задачу, позволяющую перенаправлять служебный трафик в отдельную папку электронной почты WCF.

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

Если служебный трафик не перенаправляется, то используется папка Входящие.

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

Для поддержки постановки данных в очередь для устройства требуется интерфейс API передачи сообщений CE (CEMAPI). CEMAPI используется на устройствах под управлением ОС Windows Mobile, но не в устройствах Windows Embedded CE.

Windows Mobile версии 5.0 и позднее поддерживает почтовый транспорт WCF Exchange Server. В версиях Windows Mobile, предшествующих версии 5.0 (построение 14847.2.0), для принудительной синхронизации с почтовым сервером Exchange вместо непосредственного внедрения используется сервер Systems Management Server (SMS).

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

Почтовый транспорт также поддерживается в ОС Windows Mobile 2003 для Pocket PC и Windows Mobile 2003 Second Edition для Pocket PC. Однако для устройств под управлением ОС Windows Mobile версии более ранней, чем 5.0, период синхронизации ActiveSync для входящих сообщений не всегда соответствует запланированному. Для этих устройств не рекомендуется задавать время ожидания или рекомендуется установить большое время ожидания при вызове метода Receive. ОС Windows Mobile 2003 для смартфонов не поддерживается.

  • На настольных компьютерах связь с почтовым сервером происходит напрямую через веб-службы сервера Exchange Server 2007. Настольный компьютер не поддерживает постановку данных в очередь. Следовательно, он все время должен быть подключен.

  • Приложения на настольных компьютерах, поддерживающие реализацию WCF.

Архитектура

Уровень сообщений основан на стандартной архитектуре WCF для настольных компьютеров. Уровень выполнения службы отсутствует. На следующем рисунке показан стек каналов, поддерживаемые протоколы и элементы привязки.

Уровень сообщений почтового транспорта WCF Exchange Server
Уровень сообщений почтового транспорта Exchange Server

Поддержка спецификации WS-Security версии 1.0 включает безопасную передачу сообщений по протоколу SOAP с использованием сертификатов X.509.

Класс Message построен на основе стандарта WS-Addressing. Все сообщения — асинхронные. Они поступают из одного устройства в другое через почтовый сервер без цикла обработки.

Сериализация и десериализация сообщений обрабатывается в среде выполнения .NET Compact Framework или .NET Framework. Со стороны устройства в приложении должен использоваться пользовательский сериализатор. Для настольных компьютеров этого не требуется, так как полная платформа .NET Framework поддерживает класс DataContractSerializer. Однако такой же сериализатор, используемый для мобильных устройств, необходимо использовать на настольном компьютере, если приложение поддерживает связь между устройствами и компьютером.

Разработка

Для почтового транспорта WCF Exchange Server конечная точка WCF представлена сочетанием привязки WCF и адресом конечной точки. Привязка определяет параметры, используемые для связи. Она представляет коллекцию элементов привязки, таких как элемент привязки транспорта, элемент кодировки привязки и элемент безопасности привязки. Для приложений, использующих почтовый транспорт, эти элементы определяются следующим образом.

  • Элемент привязки почтового транспорта — это транспорт электронной почты, который должен быть одним из классов, производного от объекта MailTransportBindingElementBase.

  • Элемент кодирования привязки — это кодировка текста, представленная объектом TextMessageEncodingBindingElement, хотя также поддерживаются пользовательские кодировки.

  • Элемент безопасности привязки основан на стандарте WS-Addressing, он должен быть объектом AsymmetricSecurityBindingElement.

Вместо создания набора элементов привязки в объекте CustomBinding приложения могут создавать заранее установленную коллекцию элементов привязки с помощью класса, производного от объекта MailBindingBase. Помимо элемента привязки транспорта электронной почты в этот класс входит элемент привязки кодировки текста и дополнительная защита сообщения.

Сообщения включаются в тело сообщения электронной почты или посылаются как вложение. Строка сообщения Тема содержит имя канала. Сообщение идентифицируется пользовательским штампом канала электронной почты WCF, который предоставляет класс сообщений, используемый сервером Exchange Server.

Отправка сообщений

Когда приложение отправляет сообщение, вызывается метод Send на текущем выходном канале, который должен быть открыт. Выходной канал сериализует сообщение в строку и создает сообщение в папке Черновики. Он задает соответствующие значения в полях сообщения электронной почты. После создания сообщения оно перемещается в папку Исходящие. Это происходит через интерфейс CEMAPI на мобильном устройстве или через веб-службы сервера Exchange Server на настольном компьютере. На мобильном устройстве сообщения в папке Исходящие синхронизируются с другими исходящими сообщениями, как установлено в ActiveSync.

Получение сообщений

Когда приложение, основанное на почтовом транспорте WCF Exchange Server, получает сообщение, происходит следующее.

  1. Приложение открывает входной канал.

  2. Входной канал вызывает метод Receive, чтобы начать прослушивание сообщений.

  3. Когда сервер электронной почты Exchange получает сообщение со штампом канала электронной почты WCF, оно автоматически перенаправляет сообщение в папку Служебные сообщения, расположенную на том же уровне, что и папка Входящие.

    Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

    Если сервер электронной почты Exchange не настроен для маршрутизации служебной почты WCF Exchange Server в папку Служебные сообщения, то используется папка Входящие.

  4. Входной канал, ожидающий событие получения новой почты, проверяет каждое сообщение, приходящее в папку Служебные сообщения или Входящие.

    Входной канал блокирует код, пока он ожидает сообщения.

  5. Если входной канал находит совпадающее имя конкретного канала в сообщении, он принимает сообщение и разблокирует код.

Чтобы использовать несколько входных каналов, построенных на одном транспорте, можно вызывать метод Receive. Блокировка происходит только, если метод Receive вызывается во второй раз на том же входном канале в том же потоке.

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

Только один входной канал может быть связан с одним прослушивателем канала. Второй вызов метода AcceptChannel на прослушивателе канала не вернет значения, пока первый входной канал не закроется.

Для повышения гибкости транспорт электронной почты можно настроить для обработки сообщений различных размеров разными способами. Например, в зависимости от размера сообщения его можно присылать как вложение или в теле письма. Возможно, что сообщения большого размера не будут загружены полностью во время первой синхронизации. На мобильном устройстве сообщения в папке Служебные сообщения или Входящие синхронизируются с другими входящими сообщениями, как установлено в Microsoft ActiveSync.

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

Для мобильных устройств размер каждого сообщения, изначально загружаемого в устройство, устанавливается с помощью параметров синхронизации электронной почты Microsoft ActiveSync. Если размер сообщения превышает эту величину, сначала загружается только часть его тела. Если сообщение загружено частично и прослушиватель канала ожидает сообщение, процесс транспорта обозначает сообщение как подлежащее загрузке полностью. Полный текст сообщения загружается во время следующего сеанса синхронизации.

При приеме сообщения можно получить адрес отправителя с помощью пользовательского свойства FromEmailAddress в классе Message. В следующем примере демонстрируется применение этого свойства.

System.ServiceModel.Channels.Message m;
String senderAddress;
m = input.Receive();
senderAddress = m.Properties.ContainsKey("FromEmailAddress")

Удаление сообщений

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

Процесс удаления входящих сообщений на устройствах под управлением Windows Mobile состоит из следующих шагов.

  1. Входной канал получает сообщения после вызова метода Receive.

  2. Почтовый транспорт производит вызов для удаления сообщения из хранилища сообщений на устройстве под управлением Windows Mobile.

  3. Сообщение удаляется на сервере во время следующей синхронизации электронной почты.

Процесс удаления входящих сообщений на настольных компьютерах состоит из следующих шагов.

  1. Входной канал получает сообщения после вызова метода Receive.

  2. Почтовый транспорт размещает сообщения в кэше удаленных сообщений — внутреннем кэше почтового транспорта.

  3. Во время следующего запроса почтовый транспорт проверяет кэш удаленных сообщений.

    Интервал запроса определяется свойством ServerQueryInterval.

  4. Если кэш содержит сообщения, то почтовый транспорт выдает запрос, включающий команду серверу удалить сообщения в кэше.

  5. Во время запроса почтовый транспорт проверяет события сервера и загружает все связанные сообщения.

  6. Почтовый транспорт размещает все загруженные сообщения в свой рабочий кэш для их обработки приложением.

В настольных компьютерах почтовый транспорт также выдает команду серверу удалить сообщения в кэше в следующих случаях.

  • При вызове метода Close на последнем открытом входном канале, связанном с почтовым транспортом.

  • При вызове метода Dispose на почтовом транспорте.

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

В устройствах под управлением Windows Mobile этим занимается хранилище сообщений.

Недействительные сообщения и сообщения с неверным форматом также удаляются. Недопустимыми считаются все сообщения с поврежденным конвертом протокола SOAP, они удаляются без возможности восстановления. Если в строке темы сообщения после штампа канала электронной почты WCF расположена неправильная информация, например неподдерживаемый символ в имени канала, то такое сообщение считается неправильно составленным. Неправильно составленные сообщения перемещаются в папку Удалено.

Параметры по умолчанию

Класс MailBindingBase и производные от него классы представляют коллекцию предварительно заданных элементов привязки. Эти классы разработаны для облегчения создания входных и выходных каналов. В некоторых случаях возможно понадобится изменить значения по умолчанию этих коллекций. Если свойство, значение которого следует изменить, не существует в классе MailBindingBase или производном от него классе, можно создать элемент привязки отдельно в объекте CustomBinding. Также можно вызвать метод CreateBindingElements, чтобы получить все элементы привязки в классе MailBindingBase.

Например, в классе ExchangeWebServiceMailBinding максимальный размер сообщения по умолчанию равен 65536 байтам. Максимальный размер можно увеличить до 100000 байт, используя следующий код, чтобы изменить значение свойства MaxReceivedMessageSize.

binding = new ExchangeWebServiceMailBinding(Server, Credential, MailSecurityMode.Message);
bindingElems = binding.CreateBindingElements();
bindingElems.Find<ExchangeWebServiceMailTransportBindingElement>().MaxReceivedMessageSize = 100000;
binding = new CustomBinding(bindingElems);

Безопасность

Приложения, основанные на использовании почтового транспорта WCF Exchange Server, поддерживают безопасную передачу сообщений SOAP на основе протокола WS-Security, который отражает функциональность безопасности настольных компьютеров, поддерживаемых для класса HttpTransportBindingElement. Подобная защита сообщений основана на сертификатах X.509.

При использовании предварительно заданного набора элементов привязки в подклассе объекта MailBindingBase, безопасная передача сообщений доступна, но по умолчанию отключена. Чтобы включить режим безопасной передачи сообщений, следует использовать свойство Mode. С помощью свойства AlgorithmSuite можно изменить алгоритм шифрования данных по умолчанию. Когда включается режим безопасной передачи сообщений, алгоритм шифрования по умолчанию — Basic256Rsa15.

Элементы безопасности привязки, поддерживаемые приложениями, использующими почтовый транспорт WCF Exchange Server — это SecurityBindingElement и AsymmetricSecurityBindingElement.

Bb397812.alert_note(ru-ru,VS.90).gifПримечание.

Использование безопасной среды передачи сообщений увеличивает размер сообщений. Если используется класс ExchangeWebServiceMailBinding и размер сообщения превышает 45000 байт, возможно, придется увеличить значение свойства MaxReceivedMessageSize. В примере кода в предыдущем разделе показано, как увеличить максимальный размер сообщения.

Развертывание

Для развертывания устройств библиотеки DLL почтового транспорта сервера Microsoft Exchange Server для устройств под управлением Windows Mobile предоставляются в CAB-файлах платформы .NET Compact Framework. Управляемые сборки устанавливаются в глобальный кэш сборок.

Ниже приведены библиотеки DLL для мобильных устройств:

  • Microsoft.ServiceModel.Channels.Mail.dll

  • Microsoft.ServiceModel.Channels.Mail.WindowsMobile.dll

  • Netcfmail3_5.dll, собственная программа-оболочка CEMAPI

Библиотеки DLL платформы.NET Compact Framework WCF также должны быть установлены на устройстве.

Развертывание на настольных компьютерах происходит с помощью MSI-файла установки .NET Compact Framework. Почтовый транспорт WCF Exchange Server устанавливается по умолчанию. Сборки почтового транспорта устанавливаются в глобальный кэш сборок настольного компьютера.

Ниже приведены библиотеки DLL почтового транспорта WCF Exchange Server для настольных компьютеров:

  • Microsoft.ServiceModel.Channels.Mail.dll

  • Microsoft.ServiceModel.Channels.Mail.ExchangeWebService.dll

Стандартные библиотеки DLL WCF для настольных компьютеров также должны быть установлены на устройстве.

См. также

Задачи

Пошаговое руководство. Использование почтового транспорта WCF Exchange Server

Другие ресурсы

Разработка Windows Communication Foundation и .NET Compact Framework