示例#1
0
        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
            }
        }
示例#2
0
        // Особенности реализации: возвращаемое значение и исходящие параметры
        // передаём ОДНИМ сообщением, хотя протокол разрешает несколько сообщений

        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
        }