private Uri RequestUri(AbstractEnvelope envelope)
        {
            var isOutgoingForsendelse = envelope.EnvelopeSettings.Forsendelse != null;

            return(isOutgoingForsendelse
                ? ClientConfiguration.Miljø.UrlWithOrganisasjonsnummer(envelope.EnvelopeSettings.Databehandler.Organisasjonsnummer, envelope.EnvelopeSettings.Forsendelse.Avsender.Organisasjonsnummer)
                : ClientConfiguration.Miljø.Url);
        }
        private static void ValidateEnvelopeAndThrowIfInvalid(AbstractEnvelope envelope, string prefix)
        {
            List <string> validationMessages;
            var           isValid = SdpXmlValidator.Instance.Validate(envelope.Xml().OuterXml, out validationMessages);

            if (!isValid)
            {
                var errorDescription = $"Ikke gyldig innhold i {prefix}. {validationMessages.Aggregate((current, variable) => current + Environment.NewLine + variable)}";
                Log.Warn(errorDescription);
                throw new XmlValidationException(errorDescription, validationMessages);
            }
        }
        private static void ValidateRequest(AbstractEnvelope envelope)
        {
            var    xml          = envelope.XmlDocument;
            var    xmlValidator = new OppslagstjenesteXmlValidator();
            string validationMessages;
            var    xmlValidert = xmlValidator.Validate(xml.OuterXml, out validationMessages);

            if (!xmlValidert)
            {
                Log.Warn($"Utgående forespørsel validerte ikke: {validationMessages}");
                throw new XmlException(validationMessages);
            }
        }
        private static HttpContent CreateHttpContent(AbstractEnvelope envelope, DocumentBundle asiceDocumentBundle)
        {
            var boundary = Guid.NewGuid().ToString();
            var multipartFormDataContent = new MultipartFormDataContent(boundary);

            var contentType = $"Multipart/Related; boundary=\"{boundary}\"; " + "type=\"application/soap+xml\"; " + $"start=\"<{envelope.ContentId}>\"";

            var mediaTypeHeaderValue = MediaTypeHeaderValue.Parse(contentType);

            multipartFormDataContent.Headers.ContentType = mediaTypeHeaderValue;

            AddEnvelopeToMultipart(envelope, multipartFormDataContent);
            AddDocumentBundleToMultipart(asiceDocumentBundle, multipartFormDataContent);

            return(multipartFormDataContent);
        }
        public async Task <ResponseContainer> SendAsync(AbstractEnvelope envelope)
        {
            ValidateRequest(envelope);
            var requestXml    = envelope.XmlDocument;
            var stringContent = new StringContent(requestXml.InnerXml, Encoding.UTF8, "application/soap+xml");

            using (var response = await Client().PostAsync(OppslagstjenesteKonfigurasjon.Miljø.Url, stringContent).ConfigureAwait(continueOnCapturedContext: false))
            {
                var soapResponse = await response.Content.ReadAsStreamAsync().ConfigureAwait(continueOnCapturedContext: false);

                if (!response.IsSuccessStatusCode)
                {
                    CheckResponseForErrors(soapResponse);
                }
                return(new ResponseContainer(soapResponse));
            }
        }
        private async Task <string> Send(AbstractEnvelope envelope, DocumentBundle asiceDocumentBundle = null)
        {
            if (ClientConfiguration.LoggForespørselOgRespons && RequestResponseLog.IsDebugEnabled)
            {
                RequestResponseLog.Debug($"Utgående {envelope.GetType().Name}, conversationId '{envelope.EnvelopeSettings.Forsendelse?.KonversasjonsId}', messageId '{envelope.EnvelopeSettings.GuidUtility.MessageId}': {envelope.Xml().OuterXml}");
            }

            var requestUri  = RequestUri(envelope);
            var httpContent = CreateHttpContent(envelope, asiceDocumentBundle);

            var responseMessage = await HttpClient.PostAsync(requestUri, httpContent).ConfigureAwait(false);

            var responseContent = await responseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);

            if (ClientConfiguration.LoggForespørselOgRespons && RequestResponseLog.IsDebugEnabled)
            {
                RequestResponseLog.Debug($" Innkommende {responseContent}");
            }

            return(responseContent);
        }
Exemplo n.º 7
0
        private OppslagstjenesteValidator SendEnvelope(AbstractEnvelope envelope)
        {
            var request = (HttpWebRequest)WebRequest.Create(_konfigurasjon.ServiceUri);

            request.ContentType = "text/xml;charset=UTF-8";
            request.Headers.Add("SOAPAction", "\"\"");
            request.Method    = "POST";
            request.KeepAlive = true;
            request.ServicePoint.Expect100Continue = false;
            request.Timeout = _konfigurasjon.TimeoutIMillisekunder;

            string netVersion = Assembly
                                .GetExecutingAssembly()
                                .GetReferencedAssemblies()
                                .Where(x => x.Name == "System.Core").First().Version.ToString();

            var assemblyVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

            request.UserAgent = string.Format("DifiOppslagstjeneste/{1} .NET/{0},", netVersion, assemblyVersion);

            if (_konfigurasjon.BrukProxy)
            {
                request.Proxy = new WebProxy(new UriBuilder(_konfigurasjon.ProxyScheme, _konfigurasjon.ProxyHost, _konfigurasjon.ProxyPort).Uri);
            }

            var xml   = envelope.ToXml();
            var bytes = Encoding.UTF8.GetBytes(xml.OuterXml);

            var xmlValidator = new OppslagstjenesteXmlvalidator();
            var xmlValidert  = xmlValidator.ValiderDokumentMotXsd(xml.OuterXml);

            if (!xmlValidert)
            {
                throw new XmlException(xmlValidator.ValideringsVarsler);
            }

            Logging.Log(TraceEventType.Verbose, xml.OuterXml);

            try
            {
                var requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
            }
            catch
            {
                throw new SendException("Får ikke kontakt med Oppslagstjenesten. Sjekk tilkoblingsdetaljer og prøv på nytt.");
            }
            try
            {
                var response  = request.GetResponse();
                var validator = new OppslagstjenesteValidator(response.GetResponseStream(), xml, (OppslagstjenesteInstillinger)envelope.Settings);
                return(validator);
            }
            catch (WebException we)
            {
                using (var stream = we.Response.GetResponseStream())
                    using (var reader = new StreamReader(stream))
                    {
                        var error     = reader.ReadToEnd();
                        var exception = new SoapException(error);
                        Logging.Log(TraceEventType.Critical, string.Format("> Feil ved sending (Skyldig: {0})", exception.Skyldig));
                        Logging.Log(TraceEventType.Critical, String.Format("  - {0}", exception.Beskrivelse));
                        throw exception;
                    }
            }
        }
        private void ValidateResponse(AbstractEnvelope envelope, ResponseContainer responseContainer)
        {
            var responsvalidator = new OppslagstjenesteValidator(envelope.XmlDocument, responseContainer, OppslagstjenesteKonfigurasjon);

            responsvalidator.Validate();
        }
 private T ValidateAndConvertToDtoObject <T>(AbstractEnvelope requestEnvelope, ResponseContainer responseContainer)
 {
     ValidateResponse(requestEnvelope, responseContainer);
     return(SerializeUtil.Deserialize <T>(responseContainer.BodyElement.InnerXml));
 }