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); }
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)); }