public override IMessageStatus SendReject(IReject reject) { var responseData = new SenderProvidedResponseData { Id = ReferenceName, MessageID = reject.MessageId.ToString(), To = reject.ReplyTo, Items = new object[] { new SenderProvidedResponseDataRequestRejected() { RejectionReasonDescription = reject.RejectionMessage, RejectionReasonCode = (RejectCode)reject.RejectCode }, }, ItemsElementName = new[] { ItemsChoiceType.RequestRejected } }; var signedMessage = CryptoProNetHelper.SignSmevObject(responseData, ReferenceName, SerialNumber); IMessageStatus status = null; Execute(delegate { var metadata = SmevService.SendResponse(responseData, null, signedMessage, out _); status = SmevTestMessageStatus.Create(metadata); }, reject.MessageId); return(status); }
/// <summary> /// Отправка ответа на запрос /// </summary> /// <param name="response">ответ</param> /// <returns>статус ответа</returns> public override IMessageStatus SendResponse(IResponse response) { var responseData = new SenderProvidedResponseData { Id = ReferenceName, MessageID = response.MessageId.ToString(), To = response.ReplyTo, Items = new object[] { response.MessageContent, }, ItemsElementName = new[] { ItemsChoiceType.MessagePrimaryContent } }; var signedMessage = CryptoProNetHelper.SignSmevObject(responseData, ReferenceName, SerialNumber); IMessageStatus status = null; Execute(delegate { var metadata = SmevService.SendResponse(responseData, null, signedMessage, out _); status = SmevTestMessageStatus.Create(metadata); }, response.MessageId); return(status); }
public ISMEV3Result SendReject(string responseTo, RejectCode rejectCode, string rejectDescription) { var result = new SMEV3Result { MessageId = GuidGenerator.GenerateTimeBasedGuid().ToString() }; try { var senderResponseData = new SenderProvidedResponseData(); senderResponseData.Id = "SIGNED_BY_PROVIDER"; senderResponseData.MessageID = result.MessageId; senderResponseData.To = responseTo; senderResponseData.RequestRejected = new SenderProvidedResponseDataRequestRejected[] { new SenderProvidedResponseDataRequestRejected { RejectionReasonCode = rejectCode, RejectionReasonDescription = rejectDescription } }; var request = new SendResponse(senderResponseData, null, null); var smevSign = SerializeWithSign(request, "SIGNED_BY_PROVIDER"); request.CallerInformationSystemSignature = smevSign; var response = smev.SendResponse(request); result.SoapRequest = behavior.SoapRequest; result.SoapResponse = behavior.SoapResponse; result.Status = SMEV3ResultStatus.OK; } catch (FaultException e) { result.SoapRequest = behavior.SoapRequest; result.SoapResponse = behavior.SoapResponse; result.Status = SMEV3ResultStatus.Fail; result.ErrorText = e.Message; } catch (Exception e) { result.Status = SMEV3ResultStatus.Error; result.ErrorText = e.Message; result.ErrorText += "\n" + e.StackTrace; } return(result); }
/// <summary> /// Отправить ответ /// </summary> /// <typeparam name="T"></typeparam> /// <param name="responseTo">Адрес доставки ответа, подставляется в /To, берется из запроса потребителя /ReplyTo</param> /// <param name="responseData"></param> /// <param name="attachments"></param> /// <returns></returns> public ISMEV3Result SendResponse <T>(string responseTo, T responseData, IDictionary <string, byte[]> attachments) { var result = new SMEV3Result { MessageId = GuidGenerator.GenerateTimeBasedGuid().ToString() }; try { var senderResponseData = new SenderProvidedResponseData(); senderResponseData.Id = "SIGNED_BY_PROVIDER"; senderResponseData.MessageID = result.MessageId; senderResponseData.To = responseTo; senderResponseData.MessagePrimaryContent = SerializeDetails <T>(responseData); AttachmentContentType[] contentList = null; if (attachments != null && attachments.Count > 0) { // передача будет через MTOM if (attachments.Sum(o => o.Value.Length) < 5242880) { var attachementHeaders = new List <AttachmentHeaderType>(); var attachementContents = new List <AttachmentContentType>(); foreach (var attachment in attachments) { var attachementHeader = new AttachmentHeaderType { contentId = attachment.Key, MimeType = "application/octet-stream", SignaturePKCS7 = SignedPkcs7.ComputeSignature(attachment.Value) }; var attachementContent = new AttachmentContentType { Id = attachment.Key, Content = attachment.Value }; attachementHeaders.Add(attachementHeader); attachementContents.Add(attachementContent); } contentList = attachementContents.ToArray(); senderResponseData.AttachmentHeaderList = attachementHeaders.ToArray(); } else // Передача через FTP { var refattachements = new List <RefAttachmentHeaderType>(); foreach (var attachment in attachments) { var uuid = GuidGenerator.GenerateTimeBasedGuid().ToString(); FtpUpLoad(uuid, attachment.Key, attachment.Value); var hash = SignedPkcs7.ComputeDigest(attachment.Value); var refAttachement = new RefAttachmentHeaderType { uuid = uuid, Hash = Convert.ToBase64String(hash), MimeType = "application/octet-stream", SignaturePKCS7 = SignedPkcs7.ComputeSignatureDigest(hash) }; refattachements.Add(refAttachement); } senderResponseData.RefAttachmentHeaderList = refattachements.ToArray(); } } var request = new SendResponse(senderResponseData, null, null); var smevSign = SerializeWithSign(request, "SIGNED_BY_PROVIDER"); request.CallerInformationSystemSignature = smevSign; request.AttachmentContentList = contentList; var response = smev.SendResponse(request); result.SoapRequest = behavior.SoapRequest; result.SoapResponse = behavior.SoapResponse; result.Status = SMEV3ResultStatus.OK; } catch (FaultException e) { result.SoapRequest = behavior.SoapRequest; result.SoapResponse = behavior.SoapResponse; result.Status = SMEV3ResultStatus.Fail; result.ErrorText = e.Message; } catch (Exception e) { result.Status = SMEV3ResultStatus.Error; result.ErrorText = e.Message; result.ErrorText += "\n" + e.StackTrace; } return(result); }