コード例 #1
0
        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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: Smev3Client.cs プロジェクト: TangoCS/SMEV3.Core
        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);
        }
コード例 #4
0
ファイル: Smev3Client.cs プロジェクト: TangoCS/SMEV3.Core
        /// <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);
        }