private static Task WriteAsync(As4Message message, IOwinResponse response) { var responseMime = As4MessageToMimeEntity.Serialize(message); response.ContentType = responseMime.ContentType.MimeType + responseMime.ContentType.Parameters; return(responseMime.WriteToAsync(response.Body, true)); }
public static MimeEntity Serialize(As4Message message) { var stream = new MemoryStream(); message.SoapEnvelope.Save(stream); var mimeRoot = new MimePart("application", "soap+xml") { Content = new MimeContent(stream) }; if (message.Attachments.Count == 0) { return(mimeRoot); } var multipart = new Multipart("related") { mimeRoot }; foreach (var messageAttachment in message.Attachments) { var mimeAttachment = new MimePart(messageAttachment.ContentType) { ContentId = messageAttachment.ContentId, Content = new MimeContent(messageAttachment.Stream), ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), ContentTransferEncoding = ContentEncoding.Binary }; multipart.Add(mimeAttachment); } return(multipart); }
public static void AreEqual(As4Message expected, As4Message actual) { Assert.AreEqual(expected.SoapEnvelope.OuterXml, actual.SoapEnvelope.OuterXml); Assert.AreEqual(expected.Attachments.Count, actual.Attachments.Count); for (int i = 0; i < expected.Attachments.Count; i++) { AreEqual(expected.Attachments[i], actual.Attachments[i]); } }
public As4Message Send(AccessPoint accessPoint, As4Message message) { var client = new As4Client { Certificate = Tls }; return(client.Send(accessPoint.Outbox, message)); }
public As4Message Send(AccessPoint destination, As4Message message) { var client = new As4Client { Certificate = Tls }; return(client.Send(destination.SystemInbound, message)); }
public static As4Message Create(Envelope envelope, params Attachment[] attachments) { var message = new As4Message(); message.Set(envelope); foreach (var attachment in attachments) { message.Attachments.Add(attachment); } return(message); }
private void CheckSendAndReceive(As4Message expectedRequest) { Action <As4Message> handler = actualMessage => { MessageAssert.AreEqual(expectedRequest, actualMessage); }; using (Servers.Create(Url, handler)) { var client = new As4Client(); var result = client.Send(new Uri(Url), expectedRequest); Assert.IsNull(result); } }
private void CheckSendAndReceive(As4Message expectedRequest, As4Message expectedResponse) { Func <As4Message, As4Message> handler = actualRequest => { MessageAssert.AreEqual(expectedRequest, actualRequest); return(expectedResponse); }; using (Servers.Create(Url, handler)) { var client = new As4Client(); var actualResponse = client.Send(new Uri(Url), expectedRequest); MessageAssert.AreEqual(expectedResponse, actualResponse); } }
public As4Message Send(AccessPoint destination, As4Message message) { var encrypter = new EbmsEncrypter { Attachments = message.Attachments, PublicKeyInAsn1Format = destination.Ebms.GetPublicKey(), Xml = message.SoapEnvelope }; encrypter.Encrypt(); var client = new As4Client { Certificate = TlsExternal }; return(client.Send(destination.BusinessInbound, message)); }
public static As4Message ParseMultipart(Multipart multipart) { var message = new As4Message(); var mimeParts = multipart.Cast <MimePart>(); foreach (var part in mimeParts) { if (part.IsAttachment) { message.Attachments.Add(ParseAttachment(part)); } else { message.SoapEnvelope = ParseXml(part); } } return(message); }
public As4Message Build() { var envelope = CreateSoapEnvelope(); envelope.Header.Messaging.UserMessage.PartyInfo.From.PartyId.Value = Sender.Code; envelope.Header.Messaging.UserMessage.PartyInfo.To.PartyId.Value = Receiver.Code; envelope.Header.Messaging.UserMessage.CollaborationInfo.Service.Value = UseCase; envelope.Header.Messaging.UserMessage.PayloadInfo = new List <PartInfo>(); if (Sed != null) { var sedPart = new PartInfo { Reference = $"cid:{Sed.ContentId}", PartProperties = new List <Property> { new Property { Name = "PartType", Value = "SED" }, new Property { Name = "MimeType", Value = Sed.ContentType } } }; if (Sed.IsCompressionRequired) { Sed.Stream = Compress(Sed.Stream); sedPart.PartProperties.Add(new Property { Name = "CompressionType", Value = "application/gzip" }); } envelope.Header.Messaging.UserMessage.PayloadInfo.Add(sedPart); } foreach (var attachment in Attachments) { if (attachment.IsCompressionRequired) { attachment.Stream = Compress(attachment.Stream); } var attachmentPart = new PartInfo { Reference = $"cid:{attachment.ContentId}", PartProperties = new List <Property> { new Property { Name = "PartType", Value = "Attachment" }, new Property { Name = "MimeType", Value = attachment.ContentType }, } }; if (attachment.IsCompressionRequired) { attachment.Stream = Compress(attachment.Stream); attachmentPart.PartProperties.Add(new Property { Name = "CompressionType", Value = "application/gzip" }); } envelope.Header.Messaging.UserMessage.PayloadInfo.Add(attachmentPart); } var message = new As4Message(); message.Set(envelope); message.Attachments.Add(Sed); Sed.Stream.Position = 0; var ebmsSigner = new EbmsSigner { Xml = message.SoapEnvelope, Certificate = Sender.Ebms, Uris = new [] { envelope.Header.Messaging.Id, envelope.Body.Id }, Attachments = message.Attachments }; ebmsSigner.Sign(); return(message); }