diff --git a/src/SoapCore/ServiceBodyWriter.cs b/src/SoapCore/ServiceBodyWriter.cs index 3b341764..31812f79 100644 --- a/src/SoapCore/ServiceBodyWriter.cs +++ b/src/SoapCore/ServiceBodyWriter.cs @@ -8,6 +8,7 @@ using System.ServiceModel; using System.ServiceModel.Channels; using System.Xml; +using System.Xml.Linq; using System.Xml.Serialization; using SoapCore.Meta; using SoapCore.ServiceModel; @@ -200,8 +201,20 @@ private void OnWriteXmlSerializerBodyContents(XmlDictionaryWriter writer) } else { + if (_result is XmlNode xmlNode) + { + writer.WriteStartElement(_resultName, _serviceNamespace); + xmlNode.WriteTo(writer); + writer.WriteEndElement(); + } + else if (_result is XElement xElement) + { + writer.WriteStartElement(_resultName, _serviceNamespace); + xElement.WriteTo(writer); + writer.WriteEndElement(); + } //https://github.com/DigDes/SoapCore/issues/385 - if (_operation.DispatchMethod.GetCustomAttribute()?.Style == OperationFormatStyle.Rpc) + else if (_operation.DispatchMethod.GetCustomAttribute()?.Style == OperationFormatStyle.Rpc) { var importer = new SoapReflectionImporter(_serviceNamespace); var typeMapping = importer.ImportTypeMapping(resultType);