Share via


WCF Exchange Server 메일 전송

업데이트: 2007년 11월

Microsoft Exchange Server의 WCF(Windows Communication Foundation) 메일 전송은 전자 메일 주소를 기반으로 하는 WCF 끝점을 사용하여 큐에 대기 중인 서비스를 제공합니다. 이 솔루션을 사용하면 전자 메일 서버에 연결할 수 있는 한 .NET Compact Framework 및 .NET Framework 응용 프로그램을 통해 모든 컴퓨터에서 웹 서비스를 호스팅하고 사용할 수 있습니다.

참고:

WCF는 .NET Compact Framework 버전 3.5 이상에서 지원됩니다.

이 기능을 사용하면 다음을 비롯한 다양한 응용 프로그램 시나리오를 적용할 수 있습니다.

  • 필드와 중앙 서버 간에 보안 통신을 주고 받는 응용 프로그램

  • 엔터프라이즈 서버에서 필드 장치로 데이터를 푸시하는 응용 프로그램

  • 둘 이상의 장치가 서로 직접 통신할 수 있는 피어-투-피어 응용 프로그램

    이러한 시나리오에서는 여러 관련자가 전자 메일 서버를 중개자로 사용하여 상태 정보를 주고 받습니다. 예를 들어, 일반적인 게임 시나리오에서는 전자 메일 주소나 그룹 별칭을 사용하여 응용 프로그램을 제공하는 방식으로 한 플레이어가 다른 플레이어를 게임에 초대합니다.

  • 손실된 장치를 찾는 응용 프로그램

  • 장치에 데이터를 푸시하여 다른 응용 프로그램에 대한 구성 정보를 업데이트하는 응용 프로그램

WCF Exchange Server 메일 전송은 필드 장치에서 주소 지정 기능 및 장치가 오프라인일 때 데이터를 큐에 대기시킬 수 있는 기능과 관련된 두 가지 기본 제한 사항을 해결합니다. 채널 이름과 전자 메일 주소는 WCF 끝점 주소를 구성합니다. 이것은 소켓 기반 응용 프로그램의 IP 주소 및 포트 번호와 비슷합니다. 장치의 주소 지정 기능은 전자 메일 주소를 통해 처리되고 응용 프로그램 인스턴스의 주소 지정 기능은 입력 채널 이름을 통해 처리됩니다. WS-Addressing 프로토콜은 이 사용자 지정 주소 지정 체계를 구현하는 데 사용됩니다.

큐는 Windows Mobile 탑재 장치의 로컬 데이터 저장소를 통해 지원됩니다. WCF 큐에 대한 자세한 내용은 큐 개요를 참조하십시오.

WCF Exchange Server 메일 전송을 기반으로 빌드된 응용 프로그램에서는 기본 WCF 기능을 활용할 수 있습니다. WCF는 다양한 기본 프로토콜 및 전송을 위한 통합 프로그래밍 모델을 제공하고 응용 프로그램 논리를 WCF 끝점에서 분리합니다. 이 프로그래밍 모델은 GPRS(General Packet Radio Service), Wi-Fi 및 전자 메일 서버에 액세스할 수 있는 기타 네트워크와 같은 다양한 네트워크에 대한 지원을 포함하여 여러 가지 이점을 제공합니다. WCF Exchange Server 메일 전송을 사용하여 응용 프로그램을 개발하는 것은 HTTP 채널과 같은 WCF 채널을 사용하여 응용 프로그램을 개발하는 것과 비슷합니다.

요구 사항

Exchange Server 2007은 WCF 메일 전송을 기반으로 하는 응용 프로그램의 전자 메일 서버입니다. Exchange Server 2007 서비스 팩 1은 서비스 트래픽을 WCF 전자 메일을 저장하기 위한 별도의 폴더에 리디렉션할 수 있는 관리 작업을 제공합니다.

참고:

서비스 트래픽은 리디렉션될 경우 받은 편지함을 사용합니다.

메일 전송은 장치와 데스크톱 컴퓨터에서 모두 지원됩니다.

CEMAPI(CE Messaging API)는 큐를 지원하는 장치에 필요합니다. CEMAPI는 Windows Mobile 탑재 장치에는 제공되지만 Windows Embedded CE 탑재 장치에는 제공되지 않습니다.

Windows Mobile 버전 5.0 이상에서는 WCF Exchange Server 메일 전송을 지원합니다. 버전 5.0(빌드 14847.2.0) 이전의 Windows Mobile 버전에서는 Exchange 전자 메일 서버와 강제로 동기화하는 데 SMS(Systems Management Server)가 직접 밀어넣기 대신 사용됩니다.

참고:

메일 전송은 Pocket PC용 Windows Mobile 2003 및 Pocket PC용 Windows Mobile 2003 Second Edition에서도 지원됩니다. 그러나 5.0 이전의 Windows Mobile 버전을 실행하는 장치의 경우 들어오는 메시지에 대한 ActiveSync 동기화 기간이 예정된 시간에 발생하지 않을 수 있습니다. 이러한 장치의 경우 Receive 메서드를 호출할 때 제한 시간을 지정하지 않거나 제한 시간을 충분히 지정하는 것이 좋습니다. Smartphone용 Windows Mobile 2003은 지원되지 않습니다.

  • 데스크톱 컴퓨터에서는 전자 메일 서버와의 통신이 Exchange Server 2007 웹 서비스를 통해 직접 수행되며, 큐가 지원되지 않습니다. 따라서 데스크톱 컴퓨터는 항상 온라인 상태여야 합니다.

  • 데스크톱의 응용 프로그램은 WCF의 데스크톱 구현을 사용합니다.

아키텍처

메시징 레이어는 표준 데스크톱 WCF 아키텍처를 기반으로 합니다. 서비스 런타임 레이어는 제공되지 않습니다. 다음 그림에서는 채널 스택, 지원되는 프로토콜 및 바인딩 요소를 보여 줍니다.

WCF Exchange Server 메일 전송의 메시징 레이어

Exchange Server 메일 전송을 위한 메시징 계층

WS-Security 사양 버전 1.0 사양에 대한 지원에는 X.509 인증서를 사용하는 SOAP 메시지 보안이 포함됩니다.

Message 클래스는 WS-Addressing 표준을 기반으로 빌드됩니다. 모든 메시지는 비동기 상태이기 때문에 전자 메일 서버를 통해 리턴 트립 없이 장치 간에 이동할 수 있습니다.

메시지의 serialization 및 deserialization은 .NET Compact Framework 또는 .NET Framework 런타임 내에서 처리됩니다. 장치측에서는 응용 프로그램에 사용자 지정 serializer를 사용해야 하지만 데스크톱에서는 전체 .NET Framework에서 DataContractSerializer 클래스를 지원하므로 이렇게 하지 않아도 됩니다. 그러나 응용 프로그램이 장치와 데스크톱 간의 통신을 지원하는 경우에는 장치에 사용한 것과 동일한 serializer를 데스크톱에서도 사용해야 합니다.

디자인

WCF Exchange Server 메일 전송의 경우 WCF 바인딩과 끝점 주소의 조합으로 WCF 끝점을 나타냅니다. 바인딩은 통신에 사용되는 매개 변수를 지정하며, 전송 바인딩 요소, 인코딩 바인딩 요소 및 보안 바인딩 요소가 포함된 바인딩 요소 컬렉션을 나타냅니다. 메일 전송을 사용하는 응용 프로그램의 경우 이러한 요소가 다음과 같이 정의됩니다.

CustomBinding 개체 내에 바인딩 요소 집합을 인스턴스화하는 대신 응용 프로그램이 MailBindingBase 개체에서 파생된 클래스를 사용하여 미리 정의된 바인딩 요소 컬렉션을 만들 수 있습니다. 전자 메일 전송 바인딩 요소 외에도 이 클래스에는 텍스트 인코딩 바인딩 요소와 선택적 메시지 보안이 포함됩니다.

메시지는 전자 메일 메시지의 본문에 포함되거나 첨부 파일로 전송됩니다. 메시지의 제목 줄에는 채널 이름이 포함됩니다. 메시지는 Exchange Server에서 사용하는 메시지 클래스가 제공하는 사용자 지정 WCF 전자 메일 채널 스탬프를 통해 식별됩니다.

메시지 보내기

응용 프로그램은 메시지를 보낼 때 현재 출력 채널에 대해 Send 메서드를 호출합니다. 이때 현재 출력 채널은 열려 있어야 합니다. 출력 채널은 메시지를 문자열로 serialize하고 임시 보관함 폴더에 메시지를 만든 다음 전자 메일 필드에 적절한 값을 설정합니다. 생성된 메시지는 보낼 편지함으로 이동합니다. 이것은 장치에서는 CEMAPI를 통해 수행되고 데스크톱에서는 Exchange 웹 서비스를 통해 수행됩니다. 장치에서는 보낼 편지함에 있는 메시지가 ActiveSync에 정의된 대로 다른 보내는 메시지와 동기화됩니다.

메시지 받기

WCF Exchange Server 메일 전송을 기반으로 하는 응용 프로그램이 메시지를 받을 때 다음과 같은 프로세스가 발생합니다.

  1. 응용 프로그램이 입력 채널을 엽니다.

  2. 입력 채널이 Receive 메서드를 호출하여 메시지 수신 대기를 시작합니다.

  3. Exchange 전자 메일 서버에서 WCF 전자 메일 채널 스탬프가 있는 메시지를 받으면 자동으로 메시지를 받은 편지함과 같은 수준에 있는 Service E-mail 폴더로 라우트합니다.

    참고:

    Exchange 전자 메일 서버는 WCF Exchange Server 서비스 메일을 Service E-mail 폴더로 라우트하도록 구성되지 않은 경우 받은 편지함을 대신 사용합니다.

  4. 새 메일 이벤트를 수신 대기하고 있는 입력 채널이 Service E-mail 또는 받은 편지함 폴더에 도착한 각 메시지를 검사합니다.

    입력 채널은 메시지를 수신 대기하는 동안 코드를 차단합니다.

  5. 입력 채널 이름이 메시지에 있는 특정 채널 이름과 일치하면 입력 채널이 메시지를 검색하고 코드를 차단합니다.

같은 전송을 기반으로 빌드된 여러 입력 채널에 대해서는 Receive 메서드를 호출할 수 있습니다. 차단은 같은 스레드에 있는 동일한 입력 채널에 대해 Receive가 두 번째로 호출될 때만 발생합니다.

참고:

각 채널 수신기에는 하나의 입력 채널만 연결할 수 있습니다. 채널 수신기에 있는 AcceptChannel 메서드에 대한 두 번째 호출은 첫 번째 입력 채널이 닫힐 때까지 값을 반환하지 않습니다.

유연성을 높이기 위해 전자 메일 전송은 다양한 크기의 메시지를 다양한 방법으로 처리하도록 구성할 수 있습니다. 예를 들어, 메시지를 크기에 따라 첨부 파일로 보내거나 메시지 본문에 포함할 수 있습니다. 큰 메시지는 초기 동기화 중에 완전히 다운로드되지 않을 수도 있습니다. 장치에서는 Service E-mail 또는 받은 편지함 폴더에 있는 메시지가 Microsoft ActiveSync에 정의된 대로 다른 들어오는 메시지와 동기화됩니다.

참고:

장치에서는 ActiveSync 전자 메일 동기화 설정에 따라 초기에 장치로 다운로드되는 각 메시지의 최대 크기가 제어됩니다. 메시지가 이 크기를 초과하면 메시지 본문 중 일부만 초기에 다운로드됩니다. 메시지의 일부가 다운로드되고 채널 수신기가 메시지를 기다리는 경우 메일 전송에서 메시지를 표시하여 완전히 다운로드해야 함을 나타냅니다. 전체 메시지는 다음 번 동기화 세션에서 다운로드됩니다.

메시지를 받을 때 Message 클래스에서 FromEmailAddress 사용자 지정 속성을 사용하여 보낸 사람의 전자 메일 주소를 가져올 수 있습니다. 다음 예제에서는 이 속성을 사용하는 방법을 보여 줍니다.

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 메서드를 호출한 경우

이러한 작업은 동기 상태에서 수행되므로 CloseDispose는 서버에서 메시지가 삭제될 때까지 코드를 차단합니다. 메시지를 삭제하는 데 필요한 시간은 삭제할 메시지의 수에 따라 다를 수 있습니다. 이 과정에서 오류가 발생하면 메일 전송에서는 메시지를 삭제하려고 여러 번 시도합니다.

Windows Mobile 탑재 장치에서는 메시지 저장소가 이 기능을 수행합니다.

메시지는 유효하지 않거나 형식이 잘못된 경우에도 삭제됩니다. 손상된 SOAP 봉투가 있는 메시지는 유효하지 않은 메시지로 간주되어 영구적으로 삭제됩니다. 메시지의 제목 줄에서 WCF 전자 메일 채널 스탬프 뒤에 잘못된 정보(예: 채널 이름의 지원되지 않는 문자)가 있으면 형식이 잘못된 메시지로 간주됩니다. 형식이 잘못된 메시지는 지운 편지함 폴더로 이동합니다.

기본 설정

MailBindingBase 클래스와 이 클래스에서 파생된 클래스는 미리 정의된 바인딩 요소의 컬렉션을 나타냅니다. 이러한 클래스는 입력 및 출력 채널을 보다 쉽게 만들 수 있도록 설계되었습니다. 경우에 따라서는 이러한 미리 정의된 컬렉션의 기본값을 변경해야 할 수도 있습니다. 변경해야 할 속성이 사용 중인 MailBindingBase 또는 파생 클래스에 없을 경우 CustomBinding 개체에 바인딩 요소를 별도로 만들 수 있습니다. 또는 CreateBindingElements 메서드를 호출하여 MailBindingBase에 모든 바인딩 요소를 반환할 수 있습니다.

예를 들어, ExchangeWebServiceMailBinding 클래스에서 받을 수 있는 최대 메시지 기본 크기는 65,536바이트입니다. 다음 코드를 사용하여 MaxReceivedMessageSize 속성을 설정하면 최대 크기를 100,000바이트로 늘릴 수 있습니다.

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

보안

WCF Exchange Server 메일 전송을 기반으로 하는 응용 프로그램은 HttpTransportBindingElement 클래스에 대해 지원되는 데스크톱 보안 기능과 비슷한 WS-Security 프로토콜을 기반으로 하는 SOAP 메시지 보안을 지원합니다. 이 보안 기능은 X.509 인증서를 사용합니다.

MailBindingBase 개체의 서브클래스에서 미리 정의된 바인딩 요소 집합을 사용하는 경우 메시지 보안을 사용할 수 있습니다. 그러나 메시지 보안은 기본적으로 사용하지 않도록 설정되어 있습니다. 메시지 보안을 사용하도록 설정하려면 Mode 속성을 사용합니다. AlgorithmSuite 속성을 사용하여 기본 암호화 알고리즘을 변경할 수 있습니다. 메시지 보안을 사용할 수 있는 경우 기본값은 Basic256Rsa15입니다.

WCF Exchange Server 메일 전송을 사용하는 응용 프로그램에서 지원되는 보안 바인딩 요소는 SecurityBindingElementAsymmetricSecurityBindingElement입니다.

참고:

메시지 보안을 사용하면 각 메시지의 크기가 증가합니다. ExchangeWebServiceMailBinding 클래스를 사용하고 있고 메시지가 45,000바이트보다 클 경우 MaxReceivedMessageSize 속성의 값을 늘려야 할 수 있습니다. 이전 단원의 코드 예제에서는 최대 메시지 크기를 늘리는 방법을 보여 줍니다.

배포

장치 배포의 경우 WCF Exchange Server 메일 전송 DLL이 Windows Mobile 탑재 장치의 .NET Compact Framework CAB 파일에 전달됩니다. 관리되는 어셈블리는 전역 어셈블리 캐시에 설치됩니다.

장치의 메일 전송 DLL은 다음과 같습니다.

  • Microsoft.ServiceModel.Channels.Mail.dll

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

  • CEMAPI 네이티브 래퍼인 Netcfmail3_5.dll

.NET Compact Framework WCF DLL도 장치에 있어야 합니다.

데스크톱 배포는 .NET Compact Framework .msi 설치 파일을 통해 처리됩니다. WCF Exchange Server 메일 전송 기능은 기본적으로 설치됩니다. 메일 전송 어셈블리는 데스크톱의 전역 어셈블리 캐시에 설치됩니다.

장치의 WCF Exchange Server 메일 전송 DLL은 다음과 같습니다.

  • Microsoft.ServiceModel.Channels.Mail.dll

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

표준 데스크톱 WCF DLL도 데스크톱에 있어야 합니다.

참고 항목

작업

연습: WCF Exchange Server 메일 전송 사용

기타 리소스

WCF(Windows Communication Foundation) 개발 및 .NET Compact Framework