internal Endpoint(Port port, TinyXdto.XdtoFactory factory) { Documentation = port.Documentation; Name = port.Name; foreach (var extension in port.Extensions) { if (extension is SoapAddressBinding) { Location = (extension as SoapAddressBinding).Location; } } // TODO: Проверить логику поиска foreach (var oBinding in port.Service.ServiceDescription.Bindings) { var binding = oBinding as Binding; if (binding.Name.Equals(port.Binding.Name)) { foreach (var oPortType in port.Service.ServiceDescription.PortTypes) { var portType = oPortType as PortType; if (portType.Name.Equals(binding.Type.Name)) { Interface = new Interface(portType, factory); break; } } } } }
internal Interface(PortType portType, TinyXdto.XdtoFactory factory) { Documentation = portType.Documentation; Name = portType.Name; NamespaceURI = portType.ServiceDescription.TargetNamespace; Operations = OperationCollection.Create(portType.Operations, factory); }
internal Service(System.Web.Services.Description.Service service, TinyXdto.XdtoFactory factory) { Name = service.Name; NamespaceURI = service.ServiceDescription.TargetNamespace; Documentation = service.Documentation; Endpoints = EndpointCollection.Create(service.Ports, factory); }
internal static EndpointCollection Create(PortCollection portCollection, TinyXdto.XdtoFactory factory) { var ports = new List <Endpoint> (); foreach (var mPort in portCollection) { var port = mPort as Port; ports.Add(new Endpoint(port, factory)); } return(new EndpointCollection(ports)); }
internal static OperationCollection Create(System.Web.Services.Description.OperationCollection data, TinyXdto.XdtoFactory factory) { var operations = new List <Operation> (); foreach (var oOperation in data) { var operation = oOperation as System.Web.Services.Description.Operation; operations.Add(new Operation(operation, factory)); } return(new OperationCollection(operations)); }
internal static ServiceCollection Create(System.Web.Services.Description.ServiceCollection collection, TinyXdto.XdtoFactory factory) { IList <Service> list = new List <Service>(); foreach (System.Web.Services.Description.Service service in collection) { list.Add(new Service(service, factory)); } return(new ServiceCollection(list)); }
internal static ParameterCollection Create(OperationInput operation, ReturnValue returnValue, TinyXdto.XdtoFactory factory) { var data = new List <Parameter> (); var parts = new List <MessagePartProxy> (); var def = operation.Operation.PortType.ServiceDescription; var message = def.Messages [operation.Message.Name]; foreach (var oPart in message.Parts) { var parametersPart = oPart as MessagePart; var partParameters = new List <Parameter> (); foreach (var oSchema in def.Types.Schemas) { var schema = oSchema as XmlSchema; var type = schema.Elements [parametersPart.Element] as XmlSchemaElement; if (type == null) { continue; } var items = ((type.SchemaType as XmlSchemaComplexType).Particle as XmlSchemaSequence).Items; foreach (var item in items) { var element = item as XmlSchemaElement; var direction = returnValue.OutputParamNames.Contains(element.Name) ? ParameterDirectionEnum.InOut : ParameterDirectionEnum.In ; partParameters.Add(new Parameter(element, direction, factory)); } } data.AddRange(partParameters); parts.Add(new MessagePartProxy { Parameters = partParameters, Name = parametersPart.Name, ElementName = parametersPart.Element.Name, NamespaceUri = parametersPart.Element.Namespace }); } // TODO: добавить ТОЛЬКО выходные параметры return(new ParameterCollection(data, parts)); }