protected HttpContent GetContent(string actionName, ServiceArgMap args = null) { var content = new ByteArrayContent(GetBody(actionName, args)); content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"); content.Headers.ContentType.CharSet = "\"utf-8\""; content.Headers.Add("SOAPACTION", $"\"{m_serviceUrn}#{actionName}\""); return(content); }
protected void ParseResponse(byte[] body, string actionName, ServiceArgMap argValues = null) { XmlDocument doc = new XmlDocument(); doc.LoadXml(Encoding.UTF8.GetString(body)); var node = doc.SelectSingleNode($"//*[local-name()='{actionName}Response']"); if (node == null) { HandleFault(doc); throw new ServiceFaultUpnpClrException(doc.InnerXml); } if (argValues != null) { argValues.Deserialize(node); } }
protected byte[] GetBody(string actionName, ServiceArgMap args = null) { XmlDocument doc = new XmlDocument(); var nodeEnvelope = doc.CreateElement("s", "Envelope", "http://schemas.xmlsoap.org/soap/envelope/"); var attr = doc.CreateAttribute("s", "encodingStyle", nodeEnvelope.NamespaceURI); attr.Value = "http://schemas.xmlsoap.org/soap/encoding/"; nodeEnvelope.Attributes.Append(attr); var nodeBody = doc.CreateElement("s", "Body", nodeEnvelope.NamespaceURI); var nodeAction = doc.CreateElement("u", actionName, m_serviceUrn); if (args != null) { foreach (var arg in args) { var nodeArg = doc.CreateElement(arg.Key); nodeArg.InnerXml = arg.Value.ToXml(); nodeAction.AppendChild(nodeArg); } } nodeBody.AppendChild(nodeAction); nodeEnvelope.AppendChild(nodeBody); doc.AppendChild(nodeEnvelope); using (var stream = new MemoryStream()) using (var writer = XmlWriter.Create(stream, new XmlWriterSettings() { Encoding = new UTF8Encoding(false) })) { doc.Save(writer); writer.Flush(); return(stream.ToArray()); } }