class Program
{
private static string ChannelName = "Channel1";
private static string ServiceEmailAddress = "service@fabrikam.com";
private static CFMessagingSerializer serializer = new CFMessagingSerializer(typeof(string));
static void Main(string[] args)
{
IChannelFactory<IOutputChannel> factory;
IOutputChannel output;
BindingParameterCollection bpc;
Message message;
ExchangeWebServiceMailBinding binding;
Uri clientEmailServer = new Uri("http://mail.example.com");
string clientEmailAddress = "client@example.com";
string password = "password";
binding = new ExchangeWebServiceMailBinding(clientEmailServer,
new NetworkCredential(clientEmailAddress, password));
binding.Security.Mode = MailSecurityMode.Message;
bpc = new BindingParameterCollection();
ClientCredentials cc = new ClientCredentials();
cc.ClientCertificate.SetCertificate(
System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser,
System.Security.Cryptography.X509Certificates.StoreName.My,
System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName,
"example.com");
cc.ServiceCertificate.Authentication.CertificateValidationMode =
System.ServiceModel.Security.X509CertificateValidationMode.ChainTrust;
cc.ServiceCertificate.SetDefaultCertificate(System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser,
System.Security.Cryptography.X509Certificates.StoreName.My, System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName,
"fabrikam.com");
ChannelProtectionRequirements cpr = new ChannelProtectionRequirements();
// Sign and encrypt body for *all* messages
cpr.OutgoingSignatureParts.AddParts(new MessagePartSpecification(true), "*");
cpr.IncomingSignatureParts.AddParts(new MessagePartSpecification(true), "*");
cpr.OutgoingEncryptionParts.AddParts(new MessagePartSpecification(true), "*");
cpr.IncomingEncryptionParts.AddParts(new MessagePartSpecification(true), "*");
bpc.Add(cc);
bpc.Add(cpr);
factory = binding.BuildChannelFactory<IOutputChannel>(bpc);
factory.Open();
EndpointAddress sendAddress = new EndpointAddress(MailUriHelper.CreateUri(ChannelName,
ServiceEmailAddress), EndpointIdentity.CreateX509CertificateIdentity(cc.ServiceCertificate.DefaultCertificate));
output = factory.CreateChannel(sendAddress);
message = Message.CreateMessage(MessageVersion.Default, "urn:Test", "Hello, World!", serializer);
output.Open();
output.Send(message);
output.Close();
factory.Close();
binding.Close();
// Receiving message on the server side
//
IChannelListener<IInputChannel> listener;
IInputChannel input;
Uri serviceEmailServer = new Uri("http://mail.fabrikam.com");
binding = new ExchangeWebServiceMailBinding(serviceEmailServer,
new NetworkCredential(ServiceEmailAddress, password),
MailSecurityMode.Message);
// Create credential for the listening side
ServiceCredentials sc = new ServiceCredentials();
sc.ServiceCertificate.SetCertificate(
System.Security.Cryptography.X509Certificates.StoreLocation.CurrentUser,
System.Security.Cryptography.X509Certificates.StoreName.My,
System.Security.Cryptography.X509Certificates.X509FindType.FindBySubjectName,
"fabrikam.com");
sc.ClientCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
bpc = new BindingParameterCollection();
bpc.Add(sc);
bpc.Add(cpr);
listener = binding.BuildChannelListener<IInputChannel>(MailUriHelper.CreateUri(ChannelName, ""), bpc);
listener.Open();
input = listener.AcceptChannel();
input.Open();
message = input.Receive();
string data = message.GetBody<string>(serializer);
input.Close();
listener.Close();
binding.Close();
}
}