public void CreatXmlDoc(PostDataCriteria pPostDaCri) { pPostDataCriteria = pPostDaCri; try { StringBuilder pBuilder = new StringBuilder(); pBuilder.Append("<csw:GetRecords xmlns:csw='http://www.opengis.net/cat/csw/2.0.2' version='2.0.2' service='CSW' resultType='results' "); StartPosition(pBuilder); ///Set the start position for request MaxResults(pBuilder); ///Set max number of results shown in the list box pBuilder.Append(">"); pBuilder.Append("<csw:Query typeNames='csw:Record' xmlns:ogc='http://www.opengis.net/ogc' xmlns:gml='http://www.opengis.net/gml'>"); pBuilder.Append("<csw:ElementSetName>"); pBuilder.Append("full"); pBuilder.Append("</csw:ElementSetName>"); pBuilder.Append("<csw:Constraint version='1.1.0'>"); pBuilder.Append("<ogc:Filter>"); if (pPostDaCri.IsLiveDataOnly || pPostDaCri.IsWmsOnly || (pPostDaCri.Envelope != null)) { pBuilder.Append("<ogc:And>"); } SearchText(pBuilder); ///Set search criterias, including search key word and search area if (pPostDaCri.IsLiveDataOnly) { SearchForLiveDataOnly(pBuilder); } ///Define if only search live data if (pPostDaCri.IsWmsOnly) { SearchForWmsOnly(pBuilder); } ///Define if only search wms services if (pPostDaCri.Envelope != null) { BoundingBox(pBuilder); ///Set bounding box } if (pPostDaCri.IsLiveDataOnly || pPostDaCri.IsWmsOnly || (pPostDaCri.Envelope != null)) { pBuilder.Append("</ogc:And>"); } pBuilder.Append("</ogc:Filter>"); pBuilder.Append("</csw:Constraint>"); pBuilder.Append("</csw:Query>"); pBuilder.Append("</csw:GetRecords>"); strPostData = pBuilder.ToString(); } catch (Exception ex) { throw ex; } }
public void CswRequest(PostDataCriteria pPostDaCri, int indexSelectedCatalog) { // GeoPortal and GeoNode require X/Y and pyCSW requrires Y/X CreatePostData pPostData = new CreatePostData(); if (strCatalogUrl == "http://catalog.usgin.org/geoportal/csw/discovery?" || strCatalogUrl == "http://onegeology-catalog.brgm.fr/geonetwork/srv/csw?") { pPostDaCri.SwitchXY = true; } else { pPostDaCri.SwitchXY = false; } //Get xml data for post request pPostData.CreatXmlDoc(pPostDaCri); strPostDa = pPostData.PostData; ///Send csw request Uri cswUri = new Uri(strCatalogUrl); HttpWebRequest cswRequest = (HttpWebRequest)WebRequest.Create(cswUri); cswRequest.AllowAutoRedirect = true; cswRequest.Method = "POST"; cswRequest.ContentType = "text/xml;charset=UTF-8"; UTF8Encoding encoding = new UTF8Encoding(); Byte[] byteTemp = encoding.GetBytes(strPostDa); cswRequest.ContentLength = byteTemp.Length; Stream cswRqStream = cswRequest.GetRequestStream(); cswRqStream.Write(byteTemp, 0, byteTemp.Length); cswRqStream.Close(); try { ///Get csw response HttpWebResponse cswResponse = (HttpWebResponse)cswRequest.GetResponse(); Stream cswRpStream = cswResponse.GetResponseStream(); StreamReader cswRpReader = new StreamReader(cswRpStream); strResponseTxt = cswRpReader.ReadToEnd(); cswRpReader.Close(); ///Parse csw response ParseCswResponse cPCswRp = new ParseCswResponse(); cPCswRp.ResponseTxt = strResponseTxt; cPCswRp.ParseResponse(indexSelectedCatalog); ///List all the services rDataList = cPCswRp.DataList; ///Other values needed in dockable window strNumRecords = cPCswRp.NumRecords; } catch (WebException wex) { throw wex; } catch (Exception ex) { throw ex; } }