/// <summary> /// Sends the SDMX Query Request /// </summary> /// <param name="query"> /// The SDMX Query /// </param> /// <param name="operation"> /// The Web Service function /// </param> /// <param name="output"> /// The output stream /// </param> private void SendSdmxQuery(IDataQuery query, SDMXWSFunctionV21 operation, string tempFileName) { IDataQueryFormat <XDocument> queryFormat = new StructSpecificDataFormatV21(); IBuilder <IComplexDataQuery, IDataQuery> transformer = new DataQuery2ComplexQueryBuilder(true); IComplexDataQuery complexDataQuery = transformer.Build(query); IComplexDataQueryBuilderManager complexDataQueryBuilderManager = new ComplexDataQueryBuilderManager(new ComplexDataQueryFactoryV21()); var xdoc = complexDataQueryBuilderManager.BuildComplexDataQuery(complexDataQuery, queryFormat); var doc = new XmlDocument(); doc.LoadXml(xdoc.ToString()); this.SendRequest(doc, operation, tempFileName); }
/// <summary> /// Constructs a SOAP envelope request, with a body that includes the operation as element and the W3C Document and saves the SDMX Part of the response to the specified ouput /// The W3C Document contains either a SDMX-ML Query or a SDMX-ML Registry Interface /// </summary> /// <param name="request"> /// The W3C Document representation of a SDMX-ML Query or QueryStructureRequest /// </param> /// <param name="webServiceOperation"> /// The Web Service function /// </param> /// <param name="tempFileName"> /// The temporary file name /// </param> /// <exception cref="ArgumentNullException"> /// request is null /// </exception> /// <exception cref="NsiClientException"> /// Error in server response or communication /// </exception> private void SendRequest(XmlDocument request, SDMXWSFunctionV21 webServiceOperation, string tempFileName) { if (request == null) { throw new ArgumentNullException("request"); } NsiClientHelper.LogSdmx(_config, request); var sb = new StringBuilder(); sb.AppendFormat(SoapConstants.SoapRequest, this._config.Prefix, this._wsdlConfig.GetTargetNamespace()); var doc = new XmlDocument(); doc.LoadXml(sb.ToString()); string operationName = webServiceOperation.ToString(); XmlNodeList nodes = doc.GetElementsByTagName(SoapConstants.Body, SoapConstants.Soap11Ns); XmlElement operation = doc.CreateElement( this._config.Prefix, operationName, this._wsdlConfig.GetTargetNamespace()); XmlElement queryParent = operation; string parameterName = this._wsdlConfig.GetParameterName(operationName); if (!string.IsNullOrEmpty(parameterName)) { queryParent = doc.CreateElement( this._config.Prefix, parameterName, this._wsdlConfig.GetTargetNamespace()); operation.AppendChild(queryParent); } if (request.DocumentElement != null) { XmlNode sdmxQueryNode = doc.ImportNode(request.DocumentElement, true); queryParent.AppendChild(sdmxQueryNode); } nodes[0].AppendChild(operation); var endpointUri = new Uri(this._config.EndPoint); var webRequest = (HttpWebRequest)WebRequest.Create(endpointUri); webRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; string soapAction = this._wsdlConfig.GetSoapAction(operationName); if (soapAction != null) { webRequest.Headers.Add(SoapConstants.SoapAction, soapAction); } webRequest.ContentType = HttpConstants.Content; // webRequest.Accept = "text/xml"; webRequest.Method = HttpConstants.Post; webRequest.Timeout = 1800 * 1000; // webRequest.CookieContainer = new CookieContainer(); this._config.SetupWebRequestAuth(webRequest); using (Stream stream = webRequest.GetRequestStream()) { doc.Save(stream); } try { using (WebResponse response = webRequest.GetResponse()) { using (Stream stream = response.GetResponseStream()) { if (stream != null) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; using (XmlWriter writer = XmlWriter.Create(tempFileName, settings)) { SoapUtils.ExtractSdmxMessage(stream, writer); } NsiClientHelper.LogSdmx(_config, tempFileName, Resources.InfoSoapResponse); } } } } catch (WebException ex) { NsiClientHelper.HandleSoapFault(ex); } }
/// <summary> /// Sends the specified <paramref name="complexStructureQuery"/> to the Web Service defined by <see cref="_config"/> /// </summary> /// <param name="complexStructureQuery">The <see cref="IComplexStructureQuery"/></param> /// <returns>The ISdmxObjects returned by the Web Service</returns> private ISdmxObjects SendQueryStructureRequest(IComplexStructureQuery complexStructureQuery, SDMXWSFunctionV21 sdmxwsFunctionV21) { IStructureQueryFormat <XDocument> queryFormat = new ComplexQueryFormatV21(); IComplexStructureQueryFactory <XDocument> factory = new ComplexStructureQueryFactoryV21 <XDocument>(); IComplexStructureQueryBuilderManager <XDocument> complexStructureQueryBuilderManager = new ComplexStructureQueryBuilderManager <XDocument>(factory); var wdoc = complexStructureQueryBuilderManager.BuildComplexStructureQuery(complexStructureQuery, queryFormat); var doc = new XmlDocument(); doc.LoadXml(wdoc.ToString()); string tempFileName = Path.GetTempFileName(); try { this.SendRequest(doc, sdmxwsFunctionV21, tempFileName); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.Null); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return(structureObjects); } finally { //Delete the temporary file File.Delete(tempFileName); } }
/// <summary> /// Sends the SDMX Query Request /// </summary> /// <param name="query"> /// The SDMX Query /// </param> /// <param name="operation"> /// The Web Service function /// </param> /// <param name="output"> /// The output stream /// </param> private void SendSdmxQuery(IDataQuery query, SDMXWSFunctionV21 operation, string tempFileName) { IDataQueryFormat<XDocument> queryFormat = new StructSpecificDataFormatV21(); IBuilder<IComplexDataQuery, IDataQuery> transformer = new DataQuery2ComplexQueryBuilder(true); IComplexDataQuery complexDataQuery = transformer.Build(query); IComplexDataQueryBuilderManager complexDataQueryBuilderManager = new ComplexDataQueryBuilderManager(new ComplexDataQueryFactoryV21()); var xdoc = complexDataQueryBuilderManager.BuildComplexDataQuery(complexDataQuery, queryFormat); var doc = new XmlDocument(); doc.LoadXml(xdoc.ToString()); this.SendRequest(doc, operation, tempFileName); }
/// <summary> /// Constructs a SOAP envelope request, with a body that includes the operation as element and the W3C Document and saves the SDMX Part of the response to the specified ouput /// The W3C Document contains either a SDMX-ML Query or a SDMX-ML Registry Interface /// </summary> /// <param name="request"> /// The W3C Document representation of a SDMX-ML Query or QueryStructureRequest /// </param> /// <param name="webServiceOperation"> /// The Web Service function /// </param> /// <param name="tempFileName"> /// The temporary file name /// </param> /// <exception cref="ArgumentNullException"> /// request is null /// </exception> /// <exception cref="NsiClientException"> /// Error in server response or communication /// </exception> private void SendRequest(XmlDocument request, SDMXWSFunctionV21 webServiceOperation, string tempFileName) { if (request == null) { throw new ArgumentNullException("request"); } NsiClientHelper.LogSdmx(request); var sb = new StringBuilder(); sb.AppendFormat(SoapConstants.SoapRequest, this._config.Prefix, this._wsdlConfig.GetTargetNamespace()); var doc = new XmlDocument(); doc.LoadXml(sb.ToString()); string operationName = webServiceOperation.ToString(); XmlNodeList nodes = doc.GetElementsByTagName(SoapConstants.Body, SoapConstants.Soap11Ns); XmlElement operation = doc.CreateElement( this._config.Prefix, operationName, this._wsdlConfig.GetTargetNamespace()); XmlElement queryParent = operation; string parameterName = this._wsdlConfig.GetParameterName(operationName); if (!string.IsNullOrEmpty(parameterName)) { queryParent = doc.CreateElement( this._config.Prefix, parameterName, this._wsdlConfig.GetTargetNamespace()); operation.AppendChild(queryParent); } if (request.DocumentElement != null) { XmlNode sdmxQueryNode = doc.ImportNode(request.DocumentElement, true); queryParent.AppendChild(sdmxQueryNode); } nodes[0].AppendChild(operation); var endpointUri = new Uri(this._config.EndPoint); var webRequest = (HttpWebRequest)WebRequest.Create(endpointUri); webRequest.Headers.Add("Accept-Encoding", "gzip, deflate"); webRequest.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip; string soapAction = this._wsdlConfig.GetSoapAction(operationName); if (soapAction != null) { webRequest.Headers.Add(SoapConstants.SoapAction, soapAction); } webRequest.ContentType = HttpConstants.Content; // webRequest.Accept = "text/xml"; webRequest.Method = HttpConstants.Post; webRequest.Timeout = 1800 * 1000; // webRequest.CookieContainer = new CookieContainer(); this.SetupWebRequestAuth(webRequest); using (Stream stream = webRequest.GetRequestStream()) { doc.Save(stream); } try { using (WebResponse response = webRequest.GetResponse()) { using (Stream stream = response.GetResponseStream()) { if (stream != null) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; using (XmlWriter writer = XmlWriter.Create(tempFileName, settings)) { SoapUtils.ExtractSdmxMessage(stream, writer); } NsiClientHelper.LogSdmx(tempFileName, Resources.InfoSoapResponse); } } } } catch (WebException ex) { NsiClientHelper.HandleSoapFault(ex); } }
/// <summary> /// Sends the specified <paramref name="complexStructureQuery"/> to the Web Service defined by <see cref="_config"/> /// </summary> /// <param name="complexStructureQuery">The <see cref="IComplexStructureQuery"/></param> /// <returns>The ISdmxObjects returned by the Web Service</returns> private ISdmxObjects SendQueryStructureRequest(IComplexStructureQuery complexStructureQuery, SDMXWSFunctionV21 sdmxwsFunctionV21) { IStructureQueryFormat<XDocument> queryFormat = new ComplexQueryFormatV21(); IComplexStructureQueryFactory<XDocument> factory = new ComplexStructureQueryFactoryV21<XDocument>(); IComplexStructureQueryBuilderManager<XDocument> complexStructureQueryBuilderManager = new ComplexStructureQueryBuilderManager<XDocument>(factory); var wdoc = complexStructureQueryBuilderManager.BuildComplexStructureQuery(complexStructureQuery, queryFormat); var doc = new XmlDocument(); doc.LoadXml(wdoc.ToString()); string tempFileName = Path.GetTempFileName(); try { this.SendRequest(doc, sdmxwsFunctionV21, tempFileName); ISdmxObjects structureObjects = new SdmxObjectsImpl(); IStructureParsingManager parsingManager = new StructureParsingManager(SdmxSchemaEnumType.Null); using (var dataLocation = new FileReadableDataLocation(tempFileName)) { IStructureWorkspace structureWorkspace = parsingManager.ParseStructures(dataLocation); structureObjects = structureWorkspace.GetStructureObjects(false); } NsiClientValidation.CheckResponse(structureObjects); return structureObjects; } finally { //Delete the temporary file File.Delete(tempFileName); } }