/// <summary>
        ///     Создать HTTP запрос
        /// </summary>
        /// <param name="message">
        ///     SOAP-запрос
        /// </param>
        /// <param name="attachment">
        ///     Вложение
        /// </param>
        /// <returns>
        ///     HTTP запрос
        /// </returns>
        private HttpsRequest CreateRequest(RequestMessage message, byte[] attachment)
        {
            var mime = new MimeModel
            {
                ContentLength2 = attachment.Length
            };

            message.AddHrefParameter("PackageBody", mime.DataId);
            message.GenerateHeader(vcert);

            mime.Message = message.ToString();

            var request = CreateRequest(message.MethodName);

            request.Head.AppendFormat("Content-Type: multipart/related; type=\"application/xop+xml\";boundary=\"{0}\"\r\n", mime.Boundary);

            var mimeStr = RequestBuilder.Build(mime);

            var msgBytes = Encoding.UTF8.GetBytes(mimeStr);
            var ending   = Encoding.UTF8.GetBytes(string.Format("\r\n--{0}--", mime.Boundary));

            request.Body = new byte[msgBytes.Length + attachment.Length + ending.Length];
            using (var stream = new MemoryStream(request.Body))
            {
                stream.Write(msgBytes, 0, msgBytes.Length);
                stream.Write(attachment, 0, attachment.Length);
                stream.Write(ending, 0, ending.Length);

                stream.Close();
            }

            return(request);
        }
        /// <summary>
        ///     Построить SOAP-запрос с вложением
        /// </summary>
        /// <param name="model">
        ///     MIME-модель
        /// </param>
        /// <returns>
        ///     SOAP-запрос с вложением
        /// </returns>
        public static string Build(MimeModel model)
        {
            return string.Format(
                @"--{0}
            Content-Type: text/xml; charset=utf-8
            SOAPAction: """"
            Content-Length: {1}

            {2}

            --{0}
            Content-Type: application/binary
            Content-Id: <{3}>
            Content-Length: {4}

            ", model.Boundary, model.ContentLength1, model.Message, model.DataId, model.ContentLength2);
        }
        /// <summary>
        ///     Построить SOAP-запрос с вложением
        /// </summary>
        /// <param name="model">
        ///     MIME-модель
        /// </param>
        /// <returns>
        ///     SOAP-запрос с вложением
        /// </returns>
        public static string Build(MimeModel model)
        {
            return(string.Format(
                       @"--{0}
Content-Type: text/xml; charset=utf-8
SOAPAction: """"
Content-Length: {1}

{2}


--{0}
Content-Type: application/binary
Content-Id: <{3}>
Content-Length: {4}

", model.Boundary, model.ContentLength1, model.Message, model.DataId, model.ContentLength2));
        }
        /// <summary>
        ///     Создать HTTP запрос
        /// </summary>
        /// <param name="message">
        ///     SOAP-запрос
        /// </param>
        /// <param name="attachment">
        ///     Вложение
        /// </param>
        /// <returns>
        ///     HTTP запрос
        /// </returns>
        private HttpWebRequest CreateRequest(RequestMessage message, byte[] attachment)
        {
            var mime = new MimeModel
            {
                ContentLength2 = attachment.Length
            };

            message.AddHrefParameter("PackageBody", mime.DataId);
            message.GenerateHeader(vcert);

            mime.Message = message.ToString();

            var request = CreateRequest(message.MethodName);
            request.ContentType = string.Format("multipart/related; type=\"application/xop+xml\";boundary=\"{0}\"", mime.Boundary);

            var mimeStr = RequestBuilder.Build(mime);
            var msgBytes = Encoding.UTF8.GetBytes(mimeStr);

            using (var stream = request.GetRequestStream())
            {
                stream.Write(msgBytes, 0, msgBytes.Length);
                stream.Write(attachment, 0, attachment.Length);

                var ending = Encoding.UTF8.GetBytes(string.Format("\r\n--{0}--", mime.Boundary));
                stream.Write(ending, 0, ending.Length);

                stream.Close();
            }

            return request;
        }