public void WriteRequestBody(XmlWriterImpl writer, XdtoSerializerImpl serializer, IValue [] arguments) { foreach (var messagePart in Parameters.Parts) { writer.WriteStartElement(messagePart.ElementName, messagePart.NamespaceUri); foreach (var param in messagePart.Parameters) { if (param.ParameterDirection == ParameterDirectionEnum.Out) { continue; } var argumentIndex = _indexes [param.Name]; var typeAssignment = XmlTypeAssignmentEnum.Implicit; if (param.Type is XdtoValueType) { typeAssignment = XmlTypeAssignmentEnum.Explicit; } serializer.WriteXml(writer, arguments [argumentIndex], param.Name, messagePart.NamespaceUri, typeAssignment); } writer.WriteEndElement(); // messagePart.ElementName } }
// Особенности реализации: возвращаемое значение и исходящие параметры // передаём ОДНИМ сообщением, хотя протокол разрешает несколько сообщений public void WriteResponseBody(XmlWriterImpl writer, XdtoSerializerImpl serializer, IValue returnValue, IValue [] arguments) { writer.WriteStartElement(ReturnValue.MessagePartName, NamespaceUri); serializer.WriteXml(writer, returnValue, "return", NamespaceUri); foreach (var param in Parameters) { if (param.ParameterDirection == ParameterDirectionEnum.In) { continue; } var argumentIndex = _indexes [param.Name]; serializer.WriteXml(writer, arguments [argumentIndex], param.Name, NamespaceUri); } writer.WriteEndElement(); // messagePartName }