Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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());
                }
        }