2010-02-23 Atsushi Enomoto <atsushi@ximian.com>
authorAtsushi Eno <atsushieno@gmail.com>
Tue, 23 Feb 2010 01:30:42 +0000 (01:30 -0000)
committerAtsushi Eno <atsushieno@gmail.com>
Tue, 23 Feb 2010 01:30:42 +0000 (01:30 -0000)
* WsdlImporter.cs : handle soapAction in operation binding too.
  Now it successfully generates proxy generation for Twitterlight:
  http://twitterlight.claritycon.com/TwitterWebService.asmx?WSDL

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

mcs/class/System.ServiceModel/System.ServiceModel.Description/ChangeLog
mcs/class/System.ServiceModel/System.ServiceModel.Description/WsdlImporter.cs

index 6aa388d3e152229b22dcea81029b8419a019c770..783dc7c78387f2a7b7d41417f4f0b4c74c7ee687 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-23  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * WsdlImporter.cs : handle soapAction in operation binding too.
+         Now it successfully generates proxy generation for Twitterlight:
+         http://twitterlight.claritycon.com/TwitterWebService.asmx?WSDL
+
 2010-02-23  Atsushi Enomoto  <atsushi@ximian.com>
 
        * DataContractSerializerMessageContractImporter.cs :
index be1039e32f8d8d0574fbe73886548aab62e28650..fd935dc21555dc1f82861cae2a49ea7c291cabba 100644 (file)
@@ -219,6 +219,14 @@ namespace System.ServiceModel.Description
                                                }
                                        }
 
+                                       // fill Action from operation binding if required.
+                                       if (action == "") {
+                                               if (dir != MessageDirection.Input)
+                                                       action = GetActionFromOperationBinding (wsdlPortType, op.Name);
+                                               else
+                                                       action = "*";
+                                       }
+
                                        msg_descr = new MessageDescription (action, dir);
                                        /* FIXME: Headers ? */
 
@@ -235,6 +243,24 @@ namespace System.ServiceModel.Description
                        return cd;
                }
 
+               string GetActionFromOperationBinding (PortType pt, string opName)
+               {
+                       foreach (WSBinding binding in pt.ServiceDescription.Bindings) {
+                               foreach (OperationBinding ob in binding.Operations) {
+                                       if (ob.Name != opName)
+                                               continue;
+                                       foreach (var ext in ob.Extensions) {
+                                               var sob = ext as SoapOperationBinding;
+                                               if (sob == null)
+                                                       continue;
+                                               return sob.SoapAction;
+                                       }
+                                       return String.Empty;
+                               }
+                       }
+                       return String.Empty;
+               }
+
                public ServiceEndpoint ImportEndpoint (Port wsdlPort)
                {
                        foreach (IWsdlImportExtension extension in wsdl_extensions) {