public void SerializationTest() { // Arrange. const string MethodName = "TestMethod"; const string ParameterName = "testParameter"; const string ParameterType = "TestType1"; var serviceDescription = new WebServiceClientDescription(); var method = new WebServiceMethodDescription(serviceDescription) { Name = MethodName }; method.InputParameters.Add(new WebServiceMethodParameterDescription(method) { Name = ParameterName, TypeName = ParameterType }); // Act. var element = method.GetXElement(); var newMethod = WebServiceMethodDescription.CreateMethodDescription(serviceDescription, element); // Assert. Assert.AreEqual(MethodName, newMethod.Name); Assert.AreEqual(1, newMethod.InputParameters.Count); Assert.AreEqual(ParameterName, newMethod.InputParameters.ElementAt(0).Name); Assert.AreEqual(ParameterType, newMethod.InputParameters.ElementAt(0).TypeName); }
/// <summary> /// Create a parameter description. /// </summary> /// <param name="declaringMethod"> /// The declaring method. /// </param> /// <param name="element"> /// The element. /// </param> /// <returns> /// The <see cref="WebServiceMethodParameterDescription"/>. /// </returns> public static WebServiceMethodParameterDescription CreateParameterDescription(WebServiceMethodDescription declaringMethod, XElement element) { ParseHelper.CheckRequiredElement(element, CnParameter); return new WebServiceMethodParameterDescription(declaringMethod) { Name = ParseHelper.ReadRequiredAttribute(element, CnName), TypeName = ParseHelper.ReadRequiredAttribute(element, CnTypeName), IsSoapHeader = bool.Parse( ParseHelper.ReadRequiredAttribute(element, CnIsSoapHeader)) }; }
/// <summary> /// Gets the method parameter description. /// </summary> /// <param name="declaringMethod">The declaring method.</param> /// <param name="field">The field.</param> /// <returns>WebServiceMethodParameterDescription.</returns> private static WebServiceMethodParameterDescription GetMethodParameterDescription(WebServiceMethodDescription declaringMethod, FieldInfo field) { var parameterDescription = new WebServiceMethodParameterDescription(declaringMethod) { Name = field.Name, TypeName = field.FieldType.GetAssemblyQualifiedName(), IsSoapHeader = IsMessageHeader(field) }; return parameterDescription; }
/// <summary> /// Gets the method description. /// </summary> /// <param name="declaringService">The declaring service.</param> /// <param name="method">The method.</param> /// <returns>WebServiceMethodDescription.</returns> private WebServiceMethodDescription GetMethodDescription(WebServiceClientDescription declaringService, MethodInfo method) { var requestType = GetRequestType(method); var methodDescription = new WebServiceMethodDescription(declaringService) { Name = method.Name }; var requestFields = requestType.GetFields(BindingFlags.Instance | BindingFlags.Public); var resultFields = method.ReturnType.GetFields(BindingFlags.Instance | BindingFlags.Public); methodDescription.InputParameters.AddRange( requestFields.Where(IsMessageBodyMember).Select(p => GetMethodParameterDescription(methodDescription, p))); methodDescription.InputParameters.AddRange( requestFields.Where(IsMessageHeader).Select(h => GetMethodParameterDescription(methodDescription, h))); methodDescription.OutputParameters.AddRange( resultFields.Where(IsMessageBodyMember).Select(f => GetMethodParameterDescription(methodDescription, f))); methodDescription.OutputParameters.AddRange( resultFields.Where(IsMessageHeader).Select(f => GetMethodParameterDescription(methodDescription, f))); return methodDescription; }
/// <summary> /// Creates a method description. /// </summary> /// <param name="declaringService"> /// The declaring service. /// </param> /// <param name="element"> /// The element. /// </param> /// <returns> /// The <see cref="WebServiceMethodDescription"/>. /// </returns> public static WebServiceMethodDescription CreateMethodDescription(WebServiceClientDescription declaringService, XElement element) { ParseHelper.CheckRequiredElement(element, CnMethod); var method = new WebServiceMethodDescription(declaringService) { Name = ParseHelper.ReadRequiredAttribute(element, CnName) }; var parametersElement = element.Element(CnInputParameters); if (parametersElement != null) { method.InputParameters.AddRange( parametersElement.Elements(WebServiceMethodParameterDescription.CnParameter) .Select(x => WebServiceMethodParameterDescription.CreateParameterDescription(method, x))); } var outputParametersElement = element.Element(CnOutputParameters); if (outputParametersElement != null) { method.OutputParameters.AddRange( outputParametersElement.Elements(WebServiceMethodParameterDescription.CnParameter) .Select(x => WebServiceMethodParameterDescription.CreateParameterDescription(method, x))); } return method; }