* ProtocolImporter.cs: Use the binding name as class name for the
authorLluis Sanchez <lluis@novell.com>
Tue, 1 Apr 2008 14:22:17 +0000 (14:22 -0000)
committerLluis Sanchez <lluis@novell.com>
Tue, 1 Apr 2008 14:22:17 +0000 (14:22 -0000)
  proxy.
* SoapProtocolImporter.cs: Use the element name as field name for soap
  headers. In 2.0, generate a property for accessing the field.

svn path=/trunk/mcs/; revision=99514

mcs/class/System.Web.Services/System.Web.Services.Description/ChangeLog
mcs/class/System.Web.Services/System.Web.Services.Description/ProtocolImporter.cs
mcs/class/System.Web.Services/System.Web.Services.Description/SoapProtocolImporter.cs

index b6c7120f1b19eedef6ffba52ecd38f90fae31be8..e62640cf2bf3f27bfaae7519c8cf19672ea21344 100644 (file)
@@ -1,3 +1,10 @@
+2008-04-01  Lluis Sanchez Gual <lluis@novell.com> 
+
+       * ProtocolImporter.cs: Use the binding name as class name for the
+         proxy.
+       * SoapProtocolImporter.cs: Use the element name as field name for soap
+         headers. In 2.0, generate a property for accessing the field.
+
 2008-02-22  Atsushi Enomoto  <atsushi@ximian.com>
 
        * ProtocolReflector.cs : reverted previous change, which caused
index 60a7706d5970705a4eb46132d09b198cd320666b..e8a82d73c964b4a89bd3b9a1429924c75dfcb314 100644 (file)
@@ -264,7 +264,7 @@ namespace System.Web.Services.Description {
                void ImportPortBinding (bool multipleBindings)
                {
                        if (port != null) {
-                               if (multipleBindings) className = port.Name;
+                               if (multipleBindings) className = binding.Name;
                                else className = service.Name;
                        }
                        else
index 58d98c4300875851fa8dc40d5897356fdd56e1bf..80c25b93d24d0113868bfb1640f003c3530025d9 100644 (file)
@@ -627,25 +627,50 @@ namespace System.Web.Services.Description {
                        if (part == null) throw new InvalidOperationException ("Message part " + hb.Part + " not found in message " + hb.Message);
 
                        XmlTypeMapping map;
+                       string hname;
                        if (hb.Use == SoapBindingUse.Literal)
                        {
                                map = xmlImporter.ImportDerivedTypeMapping (part.Element, typeof (SoapHeader));
+                               hname = part.Element.Name;
                                xmlExporter.ExportTypeMapping (map);
                        }
                        else
                        {
                                map = soapImporter.ImportDerivedTypeMapping (part.Type, typeof (SoapHeader), true);
+                               hname = part.Type.Name;
                                soapExporter.ExportTypeMapping (map);
                        }
 
                        string varName = headerVariables [map] as string;
                        if (varName == null) 
                        {
-                               varName = memberIds.AddUnique(CodeIdentifier.MakeValid (map.TypeName + "Value"),hb);
+                               if (hname == map.TypeName)
+                                       varName = memberIds.AddUnique(CodeIdentifier.MakeValid (hname + "Value"),hb);
+                               else
+                                       varName = memberIds.AddUnique(CodeIdentifier.MakeValid (hname),hb);
+                               
+#if NET_2_0
+                               string propName = varName;
+                               varName = varName + "Field";
+#endif
                                headerVariables.Add (map, varName);
                                CodeMemberField codeField = new CodeMemberField (map.TypeFullName, varName);
-                               codeField.Attributes = MemberAttributes.Public;
                                CodeTypeDeclaration.Members.Add (codeField);
+                               
+#if NET_2_0
+                               codeField.Attributes = MemberAttributes.Private;
+                               CodeMemberProperty codeProperty = new CodeMemberProperty ();
+                               codeProperty.Name = propName;
+                               codeProperty.Type = new CodeTypeReference (map.TypeFullName);
+                               codeProperty.Attributes = MemberAttributes.Public | MemberAttributes.Final;
+                               codeProperty.HasGet = codeProperty.HasSet = true;
+                               CodeExpression ce = new CodeFieldReferenceExpression (new CodeThisReferenceExpression(), varName);
+                               codeProperty.SetStatements.Add (new CodeAssignStatement (ce, new CodePropertySetValueReferenceExpression()));
+                               codeProperty.GetStatements.Add (new CodeMethodReturnStatement (ce));
+                               CodeTypeDeclaration.Members.Add (codeProperty);
+#else
+                               codeField.Attributes = MemberAttributes.Public;
+#endif
                        }
                        
                        CodeAttributeDeclaration att = new CodeAttributeDeclaration ("System.Web.Services.Protocols.SoapHeaderAttribute");