source: trunk/CrypPlugins/WebService/WebService.cs @ 1489

Last change on this file since 1489 was 1489, checked in by Matthäus Wander, 12 years ago

Soap + WebService:

  • migrated to VS2010
  • replaced Control properties with regular Data properties
File size: 38.4 KB
Line 
1using System;
2using System.Windows;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text;
6using Cryptool.PluginBase;
7using Cryptool.PluginBase.IO;
8using System.ComponentModel;
9using Cryptool.PluginBase.Miscellaneous;
10using System.Xml;
11using System.Web.Services.Description;
12using System.Web.Services.Configuration;
13using System.CodeDom.Compiler;
14
15
16using Microsoft.CSharp;
17
18using System.Security.Cryptography.Xml;
19
20using System.Security.Cryptography;
21using System.Data;
22using System.IO;
23using System.Xml.Schema;
24using System.Collections;
25using System.Windows.Documents;
26using System.Windows.Threading;
27using System.Threading;
28using System.Windows.Media;
29
30using System.Security.Cryptography.X509Certificates;
31
32using System.Windows.Controls;
33using Cryptool.PluginBase.Control;
34
35
36
37//using Microsoft.Web.Services3.Messaging;
38
39
40namespace WebService
41{
42    [Author("Tim Podeszwa", "tim.podeszwa@student.uni-siegen.de", "Uni Siegen", "http://www.uni-siegen.de")]
43    [PluginInfo(false, "WebService", "Represents a Web Service", "", "WebService/webservice.png")]
44    public class WebService:IThroughput
45    {
46        private ISettings settings = new WebServiceSettings();
47        public WebServicePresentation presentation;
48        private WebServiceQuickWatchPresentation quickWatch;
49        public XmlDocument inputString, outputString, modifiedInput;
50        public Object service;
51        public string[] wsdlMethode;
52        public ServiceDescription serviceDescription;
53        public XmlDocument wsdlDocument, soapResponse;
54        public XmlNode node, envelope, body;
55        public string[] stringArray = new string[5];
56        public DataSet set;
57        public string eingabeparameter = "";
58        public string eingabeparameterString = "";
59        public string[] rückgabeparameter = new string[5];
60        public string methodName="";
61        public string webMethod = "";
62        private SignedXml signedXml;
63        private SignatureValidator validator;
64        private XmlSchemaCollection collection;
65        private string wsdl,publickey;
66
67        public RSACryptoServiceProvider provider;
68        public WebService()
69        {
70
71
72       
73         
74         
75           
76            wsdlDocument = new XmlDocument();
77            modifiedInput = new XmlDocument();
78          //  XmlSchema soapSchema = new XmlSchema();
79          //  XmlSchema signatureSchema = new XmlSchema();
80          //  string soapschema = Resource1.SoapSchema;
81          //  string signatureschema = Resource1.SignatureSchema;
82          //  string wsseSchema = Resource1.WSSESchema;
83          //  collection = new XmlSchemaCollection();
84          //  StringReader sreader = new StringReader(soapschema);
85          //  XmlTextReader reader = new XmlTextReader(sreader);
86          //  collection.Add("http://www.w3.org/2003/05/soap-envelope", reader);
87          // sreader = new StringReader(signatureschema);
88          //reader = new XmlTextReader(sreader);
89          //  collection.Add("http://www.w3.org/2000/09/xmldsig#", reader);
90          //  sreader = new StringReader(wsseSchema);
91          //  reader = new XmlTextReader(sreader);
92          //  collection.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", reader);
93
94
95   
96           
97           // XmlSchema schema = (XmlSchema)obj;
98            wsdlMethode = new string[1];
99            wsdlMethode[0]="\n" + @"   
100            public ServiceDescription getWsdl(){
101            ServiceDescription s1;
102            ServiceDescriptionReflector serviceDescriptionReflector = new ServiceDescriptionReflector();
103            serviceDescriptionReflector.Reflect(typeof(Service), null);
104            System.IO.StringWriter stringWriter = new System.IO.StringWriter();
105            serviceDescriptionReflector.ServiceDescriptions[0].Write(stringWriter);
106            s1 = serviceDescriptionReflector.ServiceDescriptions[0];
107            XmlSchema schema = s1.Types.Schemas[0];
108            string theWsdl = stringWriter.ToString();
109            return s1;
110            }}";
111
112           
113         
114            stringArray[0] = @" using System;
115            using System.Web;
116            using System.Web.Services;
117            using System.Web.Services.Protocols;
118            using System.Web.Services.Description;
119            using System.Xml;
120            using System.Xml.Schema;
121            using System.IO;";
122
123            stringArray[1] = @"
124           
125            public class Service : System.Web.Services.WebService
126            {
127              public Service()
128             {
129     
130              }";
131            stringArray[2] = @"[WebMethod]";
132            this.PropertyChanged += new PropertyChangedEventHandler(WebService_PropertyChanged);
133            this.presentation = new WebServicePresentation(this);
134      //      this.quickWatch = new WebServiceQuickWatchPresentation();
135            settings.PropertyChanged += new PropertyChangedEventHandler(settings_PropertyChanged);
136            this.WebServiceSettings.Test = 1;
137            this.WebServiceSettings.Integer = 1;
138            this.WebServiceSettings.MethodName = "methodName";
139            OnGuiLogNotificationOccured += new GuiLogNotificationEventHandler(WebService_OnGuiLogNotificationOccured);
140            CspParameters parameters = new CspParameters();
141            parameters.KeyContainerName = "Container";
142            provider = new RSACryptoServiceProvider(parameters);
143           
144        }
145
146        void WebService_OnGuiLogNotificationOccured(IPlugin sender, GuiLogEventArgs args)
147        {
148            int n =5;
149        }
150
151        void WebService_PropertyChanged(object sender, PropertyChangedEventArgs e)
152        {
153            if (e.PropertyName == "InputString")
154            {
155                this.checkSoap();
156                if (this.inputString != null)
157                {
158                    presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
159                    {
160                        this.presentation.resetSoapInputItem();
161
162                        this.presentation.namespacesTable.Clear();
163                        this.presentation.CopyXmlToTreeView(this.inputString.ChildNodes[1], ref this.presentation.soapInput,false);
164                       
165                       
166                        this.presentation.treeView4.Items.Add(this.presentation.soapInput);
167                        this.presentation.findItem(presentation.soapInput, "Envelope",1).IsExpanded = true;
168                        this.presentation.findItem(presentation.soapInput,"Header",1).IsExpanded=true;
169                        this.presentation.findItem(presentation.soapInput, "Security",1).IsExpanded = true;
170                        this.presentation.findItem(presentation.soapInput, "Signature",1).IsExpanded = true;
171                        this.presentation.findItem(presentation.soapInput, "Body",1).IsExpanded = true;
172                        this.presentation.treeView4.Items.Refresh();
173                       
174                    }, null);
175                   
176                }
177                }
178        }
179        public void createKey()
180        {
181            CspParameters parameters= new CspParameters();
182            parameters.KeyContainerName = "Container";
183            provider = new RSACryptoServiceProvider(parameters);
184            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Schlüsselpaar erfolgreich erstellt", this, NotificationLevel.Info));
185
186         
187
188        }
189        public string exportPublicKey()
190        {
191            if(provider!=null)
192            {
193                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Öffentlicher Schlüssel exportiert", this, NotificationLevel.Info));
194             return   provider.ToXmlString(false);
195            }
196            return "";
197        }
198        void settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
199        {
200            WebServiceSettings s = (WebServiceSettings)sender;
201            if(e.PropertyName.Equals("createKey"))
202            {
203                this.createKey();
204           
205
206            }
207            if (e.PropertyName.Equals("publishKey"))
208            {
209                PublicKey = exportPublicKey();
210            }
211            if (e.PropertyName.Equals("exportWSDL"))
212            {
213                Wsdl = this.wsdlDocument;
214            }
215            if (e.PropertyName.Equals("MethodenStub"))
216            {
217               
218               
219                this.WebServiceSettings.Integer = 1;
220                this.WebServiceSettings.String = 0;
221                this.WebServiceSettings.Test = 4;
222                this.WebServiceSettings.Double = 2;
223                this.WebServiceSettings.MethodName = "berechneVerzinsung";
224             
225               
226                if (presentation.textBlock1.Inlines != null)
227                {
228                    presentation.textBlock1.Inlines.Clear();
229                }
230             
231                this.presentation.textBlock1.Inlines.Add(new Bold(new Run(stringArray[2].ToString()+"\n")));
232                this.presentation.visualMethodName(WebServiceSettings.MethodName) ;
233                this.presentation.visualReturnParam("double");
234         
235               
236                this.presentation.richTextBox1.Document.Blocks.Clear();
237                this.presentation.richTextBox1.AppendText("double endKapital;\n"+"int laufzeit=intparam1;\n"+"double zinssatz=doubleparam1;\n"+"double startKapital=doubleparam2;\n"+"endKapital=Math.Round(startKapital*(Math.Pow(1+zinssatz/100,laufzeit)));\n"+"return endKapital;") ;
238           
239            }
240
241            else
242            {
243                if (e.PropertyName.Equals("Test"))
244                {
245                    rückgabeparameter[0] = "void";
246                    rückgabeparameter[1] = "int";
247                    rückgabeparameter[2] = "string";
248                    rückgabeparameter[3] = "float";
249                       rückgabeparameter[4] = "double";
250                    this.presentation.visualReturnParam(rückgabeparameter[s.Test]);
251                }
252                 
253             
254                   
255             
256                if (e.PropertyName.Equals("Integer"))
257                {
258                    if (s.Integer == 1)
259                    {
260                       
261                        this.presentation.visualParam("int",1);
262                    }
263                    if (s.Integer == 2)
264                    {
265                         this.presentation.visualParam("int",2);
266                    }
267                    if (s.Integer == 0)
268                    {
269                        this.presentation.visualParam("int", 0);
270                    }
271
272                }
273                if (e.PropertyName.Equals("String"))
274                {
275                    if (s.String == 1)
276                    {
277                        this.presentation.visualParam("string", 1);
278                    }
279                    if (s.String == 2)
280                    {
281
282                        this.presentation.visualParam("string", 2);
283                        }
284                   
285                    if (s.String == 0)
286                    {
287                        this.presentation.visualParam("string", 0);
288                    }
289                }
290                if (e.PropertyName.Equals("Double"))
291                {
292                    if (s.Double == 1)
293                    {
294                        this.presentation.visualParam("double", 1);
295                    }
296                    if (s.Double == 2)
297                    {
298
299                        this.presentation.visualParam("double", 2);
300                    }
301
302                    if (s.Double == 0)
303                    {
304                        this.presentation.visualParam("double", 0);
305                    }
306                }
307
308
309                if (e.PropertyName.Equals("MethodName"))
310                {
311                    this.methodName = s.MethodName;
312                    this.presentation.visualMethodName(s.MethodName);
313                }
314             
315                {
316                    string komma = "";
317                    if(!eingabeparameter.Equals("")){
318                        komma=",";
319                    }
320                    if(eingabeparameterString.Equals("")){
321                        komma="";
322                    }
323                    stringArray[3] = @"public" + " " + rückgabeparameter[s.Test] + " " + methodName + "(" + "" + eingabeparameter +komma+ eingabeparameterString+")\n{";
324
325                } StringBuilder code = new StringBuilder();
326
327                code.Append(stringArray[0]);
328                code.Append(stringArray[1]);
329                code.Append(stringArray[2]);
330                code.Append(stringArray[3]);
331             
332     
333             
334            }   
335        }
336        public int getSignatureNumber()
337        {
338            return this.inputString.GetElementsByTagName("ds:Signature").Count;
339
340        }
341       
342        public bool checkSignature()
343        {
344            XmlDocument neu = new XmlDocument();
345        //   this.inputString.Save(@"C:\Users\Tim\Desktop\test.xml");
346           XmlNodeList signatureElements = this.inputString.GetElementsByTagName("Signature");
347           XmlElement signaturElement = (XmlElement)signatureElements.Item(0);
348           SignedXml signedXml = new SignedXml(this.inputString);
349           signedXml.LoadXml(signaturElement);
350           bool test = signedXml.CheckSignature();
351            return test;
352        }
353        public void readDescription()
354        {
355            set = new DataSet();
356            XmlSchema paramsSchema = this.serviceDescription.Types.Schemas[0];
357         //   this.collection.Add(paramsSchema);
358            StringWriter schemaStringWriter = new StringWriter();
359            paramsSchema.Write(schemaStringWriter);
360            StringReader sreader = new StringReader(schemaStringWriter.ToString());
361            XmlTextReader xmlreader = new XmlTextReader(sreader);
362            set.ReadXmlSchema(xmlreader);
363
364        }
365       // private bool checkSchema()
366       // {
367       //     XmlSchema soapSchema = collection["http://www.w3.org/2003/05/soap-envelope"];
368       //     XmlSchema paramsSchema = collection["http://tempuri.org/"];
369       //     XmlSchema signatureSchema = collection["http://www.w3.org/2000/09/xmldsig#"];
370       //     XmlSchema wsseSchema = collection["http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"];
371       //     string xmlString= this.inputString.InnerXml;
372       //     StringReader stringReader= new StringReader(xmlString);
373       //     XmlTextReader xmlreader = new XmlTextReader(stringReader);
374       //     XmlValidatingReader validatingReader = new XmlValidatingReader(xmlreader);
375       //     validatingReader.Schemas.Add(collection);
376       //     validatingReader.ValidationEventHandler += new ValidationEventHandler(validatingReader_ValidationEventHandler);
377       //     validatingReader.ValidationType = System.Xml.ValidationType.Schema;
378       //     XmlDocument inputStringClone = (XmlDocument)this.inputString.Clone();
379       //     inputStringClone.Schemas.Add(soapSchema);
380       //     inputStringClone.Schemas.Add(signatureSchema);
381       //     inputStringClone.Schemas.Add(wsseSchema);
382       //     inputStringClone.Schemas.Add(paramsSchema);
383       //     try
384       //     {
385       //         inputStringClone.Load(validatingReader);
386
387       //     inputStringClone.Validate(validatingReader_ValidationEventHandler);
388       //     }
389       //     catch (Exception exception)
390       //     {
391       //         validatingReader.Close();
392       //         return false;
393       //     }
394       //     validatingReader.Close();
395       //     return true;
396       // }
397
398       //void validatingReader_ValidationEventHandler(object sender, ValidationEventArgs e)
399       // {
400       //     switch (e.Severity)
401       //     {
402       //         case XmlSeverityType.Error:
403       //             Console.WriteLine("Error: {0}", e.Message);
404       //             break;
405       //         case XmlSeverityType.Warning:
406       //             Console.WriteLine("Warning {0}", e.Message);
407       //             break;
408       //     }
409       // }
410       private bool compiled()
411       {
412           if (serviceDescription == null)
413           {
414               EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
415               return false;
416           }
417           return true;
418       }
419        public SignatureValidator getValidator()
420        {
421            return this.validator;
422        }
423        private void checkSoap()
424        {
425            bool signatureValid = true;
426           // this.checkSchema();
427            this.compiled();
428            if (this.inputString == null)
429                return;
430            if (this.inputString.GetElementsByTagName("ds:Signature") != null)
431            {
432
433                validator = new SignatureValidator(this);
434            }
435            signatureValid = validator.valid;
436         
437            object test2 = new object();
438            object[] array = null;
439            string response;
440            if (serviceDescription == null)
441            {
442                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
443            }
444            else
445            {
446                if (!signatureValid)
447                {
448                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Signature Validation failed", this, NotificationLevel.Error));
449                    goto Abbruch;
450                }
451
452                Types types = this.serviceDescription.Types;
453                PortTypeCollection portTypes = this.serviceDescription.PortTypes;
454                MessageCollection messages = this.serviceDescription.Messages;
455                PortType porttype = portTypes[0];
456                Operation operation = porttype.Operations[0];
457                OperationOutput output = operation.Messages[0].Operation.Messages.Output;
458                OperationInput input = operation.Messages[0].Operation.Messages.Input;
459                Message messageOutput = messages[output.Message.Name];
460                Message messageInput = messages[input.Message.Name];
461                MessagePart messageOutputPart = messageOutput.Parts[0];
462                MessagePart messageInputPart = messageInput.Parts[0];
463                XmlSchema xmlSchema = types.Schemas[0];
464
465
466                XmlSchemaElement outputSchema = (XmlSchemaElement)xmlSchema.Elements[messageOutputPart.Element];
467                XmlSchemaElement inputSchema = (XmlSchemaElement)xmlSchema.Elements[messageInputPart.Element];
468
469                XmlSchemaComplexType complexTypeOutput = (XmlSchemaComplexType)outputSchema.SchemaType;
470                XmlSchemaSequence sequenzTypeOutput = (XmlSchemaSequence)complexTypeOutput.Particle;
471
472                XmlSchemaComplexType complexTypeInput = (XmlSchemaComplexType)inputSchema.SchemaType;
473                XmlSchemaSequence sequenzTypeInput = (XmlSchemaSequence)complexTypeInput.Particle;
474
475                Hashtable paramTypesTable = new Hashtable();
476                StringWriter twriter = new StringWriter();
477                //  TextWriter writer= new TextWriter(twriter);
478                xmlSchema.Write(twriter);
479
480               
481                set = new DataSet();
482                StringReader sreader = new StringReader(twriter.ToString());
483                XmlTextReader xmlreader = new XmlTextReader(sreader);
484                set.ReadXmlSchema(xmlreader);
485                if (sequenzTypeInput != null)
486                {
487                    foreach (XmlSchemaElement inputParam in sequenzTypeInput.Items)
488                    {
489                        XmlQualifiedName schemaName = inputParam.SchemaTypeName;
490                        paramTypesTable.Add(inputParam.QualifiedName.Name, schemaName.Name);
491                    }
492
493                   
494
495               
496                   
497                    XmlDocument t = new XmlDocument();
498
499               
500                    XmlNamespaceManager manager = new XmlNamespaceManager(this.modifiedInput.NameTable);
501                    XmlElement b = (XmlElement)this.inputString.GetElementsByTagName("s:Body")[0];
502                    manager.AddNamespace("s", b.NamespaceURI);
503                    manager.AddNamespace("tns", "http://tempuri.org/");
504                    XmlNode node = this.modifiedInput.SelectSingleNode("s:Envelope/s:Body/" + "tns:" + set.Tables[0].TableName, manager);
505                    XmlElement ele = (XmlElement)node; 
506                  //XmlElement ele2 = (XmlElement)this.modifiedInput.GetElementsByTagName(set.Tables[0].TableName, fsdf.TargetNamespace)[0];
507                    //   object test = service.GetType().InvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, service,);
508                    int n = new Int32();
509                    try
510                    {
511                       
512                   
513                        n = ele.ChildNodes.Count;
514
515                    }
516
517                    catch
518                    {
519                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
520                    }
521                    if (n != 0)
522                    {
523                        array = new Object[n];
524
525                        for (int i = 0; i < n; i++)
526                        {
527                            string param = ele.ChildNodes[i].InnerText;
528                            Object paramType = paramTypesTable[ele.ChildNodes[i].LocalName];
529                            if (paramType.ToString().Equals("int"))
530                            {
531                                if (!ele.ChildNodes[i].InnerText.Equals(""))
532                                {
533                                    try
534                                    {
535                                        array[i] = Convert.ToInt32((Object)ele.ChildNodes[i].InnerText);
536                                    }
537                                    catch(Exception e) 
538                                    {
539                                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
540                                        goto Abbruch;
541                                    }
542                                }
543                                else {
544                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
545                                    goto Abbruch;
546                               
547                                }
548                            }
549                            if (paramType.ToString().Equals("string"))
550                            {
551                                try
552                                {
553                                    array[i] = Convert.ToString((Object)ele.ChildNodes[i].InnerText);
554                                }
555                                catch (Exception e)
556                                {
557                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
558                                    goto Abbruch;
559                                }
560                            }
561                            if (paramType.ToString().Equals("double"))
562                            {
563                                try
564                                {
565                                    array[i] = Convert.ToDouble((Object)ele.ChildNodes[i].InnerText);
566
567                                }
568                                catch (Exception e)
569                                {
570                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
571                                    goto Abbruch;
572                                }
573                            }
574
575                        }
576
577                        //object test2 = service.GetType().getmInvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, null, array);
578                          for(int i =0;i<array.Length;i++)
579                        {
580                            if (array[i] == null)
581                            {goto Abbruch;
582                             
583                            }
584                        }
585                        try
586                        {   
587                            Type typ = service.GetType().GetMethod(operation.Name).ReturnType;
588                            string returnType = typ.ToString();
589                            if (!returnType.Equals("System.Void"))
590                            {
591                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString();
592                            }
593                            else { service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString(); }
594                        }
595                        catch(Exception e)
596                        {
597                            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
598                            goto Abbruch;
599                        }
600                        }
601                     
602                   
603                    else
604                    {
605                        if (sequenzTypeOutput != null)
606                        {
607                            try
608                            {
609                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, null).ToString();
610                            }
611                            catch(Exception e)
612                            {
613                                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
614                                goto Abbruch;
615                            }
616                        }
617                        else { service.GetType().GetMethod(operation.Name).Invoke(service, array); }
618                    }
619                    response = test2.ToString();
620                    this.createResponse(response);
621
622           
623                   
624                       
625                   
626                }
627            }
628        Abbruch: ;
629        }
630        public void createResponse(string response)
631        {
632            soapResponse = new XmlDocument();
633            node = soapResponse.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
634
635            soapResponse.AppendChild(node);
636            envelope = soapResponse.CreateElement("Envelope", "http://www.w3.org/2001/12/soap-envelope");
637
638
639            soapResponse.AppendChild(envelope);
640
641            body = soapResponse.CreateElement("Body", "http://www.w3.org/2001/12/soap-envelope");
642            XmlNode eingabe = soapResponse.CreateElement(set.Tables[1].ToString(), set.Tables[1].Namespace);
643            DataTable table = set.Tables[1];
644            foreach (DataColumn tempColumn in table.Columns)
645            {
646                XmlNode neu = soapResponse.CreateElement(tempColumn.ColumnName, set.Tables[1].Namespace);
647                neu.InnerText = response;
648                eingabe.AppendChild(neu);
649            }
650            body.AppendChild(eingabe);
651            envelope.AppendChild(body);
652            this.OutputString = soapResponse;
653        }
654        [PropertyInfo(Direction.InputData, "SOAP input", "Input a SOAP message to be processed by the Web Service", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text,"XmlConverter")]
655        public XmlDocument InputString
656        {
657            get { return this.inputString; }
658            set
659            {
660               
661                    this.inputString = value;
662                    OnPropertyChanged("InputString");
663               
664            }
665
666        }
667
668        [PropertyInfo(Direction.OutputData, "WSDL output", "Web Service Description", null, DisplayLevel.Beginner)]
669        public XmlDocument Wsdl
670        {
671            get { return this.wsdlDocument; }
672            set
673            {
674                this.wsdlDocument = value;
675                OnPropertyChanged("Wsdl");
676            }
677        }
678
679        [PropertyInfo(Direction.OutputData, "Public-Key output", "Encryption Key", null, DisplayLevel.Beginner)]
680        public string PublicKey
681        {
682            get { return this.publickey; }
683            set
684            {
685                this.publickey = value;
686                OnPropertyChanged("PublicKey");
687            }
688        }
689
690        [PropertyInfo(Direction.OutputData, "SOAP output", "Response from Web Service", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, "XmlOutputConverter")]
691        public XmlDocument OutputString
692        {
693            get { return this.outputString; }
694            set
695            {
696                this.outputString = value;
697                OnPropertyChanged("OutputString");
698            }
699
700
701        }
702        public Object XmlOutputConverter(Object Data)
703        {
704            string test = Data.ToString();
705
706            XmlDocument doc = (XmlDocument)this.outputString;
707            StringWriter stringWriter = new StringWriter();
708            Object obj = new Object();
709            try
710            {
711                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
712                xmlWriter.Formatting = Formatting.Indented;
713                doc.WriteContentTo(xmlWriter);
714                obj = (Object)stringWriter.ToString();
715            }
716            catch (Exception e)
717            {
718                Console.WriteLine(e.ToString());
719             
720            }
721
722
723            return obj;
724        }
725        public Object XmlConverter(Object Data)
726        {
727         
728           
729            XmlDocument doc = (XmlDocument)this.inputString;
730            StringWriter stringWriter = new StringWriter();
731            Object obj = new Object();
732            try
733            {
734                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
735                xmlWriter.Formatting = Formatting.Indented;
736                doc.WriteContentTo(xmlWriter);
737                obj = (Object)stringWriter.ToString();
738            }
739            catch (Exception e)
740            {Console.WriteLine(e.ToString());
741       
742            }
743 
744            return obj ;
745        }
746
747        public ServiceDescription description
748        {
749            get { return this.serviceDescription; }
750            set { this.serviceDescription = value; }
751        }
752        public WebServiceSettings  WebServiceSettings
753        {
754            get { return (WebServiceSettings) this.settings; }
755            set { this.settings = value; }
756        }
757        public ArrayList getSignatureReferences(int i)
758        {
759           return this.validator.getSignatureReferences(i);
760        }
761        public ArrayList getSignedXmlSignatureReferences()
762        {
763            return this.validator.getSignedXmlSignatureReferences();
764        }
765        public void compile(string code)
766        {
767            CSharpCodeProvider codeProvider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } });
768            string header = "";
769            presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
770                {
771                    header=this.presentation.copyContentToString(this.presentation.textBlock1);
772                   
773                }, null);
774            codeProvider.CreateGenerator();
775            CompilerParameters cp = new CompilerParameters();
776            cp.ReferencedAssemblies.Add("System.dll"); //includes
777            cp.ReferencedAssemblies.Add("System.Web.dll");
778            cp.ReferencedAssemblies.Add("System.Web.Services.dll");
779            cp.ReferencedAssemblies.Add("System.Xml.dll");
780            CompilerResults cr = null;
781            cp.GenerateExecutable = false;
782
783            try
784            {
785                Run methodDeclaration = null;
786                string wsdl = wsdlMethode[0];
787
788
789                cr = codeProvider.CompileAssemblyFromSource(cp, stringArray[0].ToString() + stringArray[1].ToString() + code + wsdl);
790
791                System.Reflection.Assembly a = cr.CompiledAssembly;
792                service = a.CreateInstance("Service");
793
794
795
796
797                object obj = service.GetType().InvokeMember("getWsdl", System.Reflection.BindingFlags.InvokeMethod, null, service, null);
798                ServiceDescription description = (ServiceDescription)obj;
799                System.IO.StringWriter stringWriter = new System.IO.StringWriter();
800
801                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
802                xmlWriter.Formatting = Formatting.Indented;
803                description.Write(xmlWriter);
804
805                string theWsdl = stringWriter.ToString();
806                presentation.showWsdl(theWsdl);
807                this.description = description;
808                StringReader stringReader = new StringReader(theWsdl);
809                XmlTextReader xmlReader = new XmlTextReader(stringReader);
810                wsdlDocument.LoadXml(theWsdl);
811                System.Windows.Controls.TreeViewItem xmlDecl = null;
812                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
813                {
814                    if (presentation.treeView1.HasItems)
815                    {
816                        xmlDecl = (System.Windows.Controls.TreeViewItem)presentation.treeView1.Items[0];
817                        if (xmlDecl.HasItems)
818                        {
819                            xmlDecl.Items.Clear();
820                        }
821                    }
822
823                }, null);
824                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
825                {
826                    presentation.CopyXmlToTreeView(wsdlDocument.ChildNodes[1], ref presentation.item,false);
827                    TreeView parent = (TreeView)presentation.item.Parent;
828
829                    if (parent != null)
830                    {
831                        int pos = parent.Items.IndexOf(presentation.item);
832                        parent.Items.RemoveAt(pos);
833                    }
834                     
835                    presentation.treeView1.Items.Add(presentation.item);
836                    presentation.item.IsExpanded = true;
837                    for (int i = 0; i < presentation.item.Items.Count; i++)
838                    {
839                        TreeViewItem item =(TreeViewItem) presentation.item.Items[i];
840                        item.IsExpanded = true;
841                    }
842                 
843                    presentation.textBox3.Text = "Erstellen erfolgreich";
844                    this.readDescription();
845                  //  presentation.fillElementTextBox();
846
847                }, null);
848               
849
850
851            }
852
853           
854           
855           
856         
857            catch (Exception exception)
858            { 
859               CompilerErrorCollection errors = cr.Errors;
860                int errorCounter= errors.Count;
861               if (errors != null)
862               {
863                   for (int i = 0; i < errorCounter; i++)
864                   {
865                       this.presentation.textBox3.Text+="Fehlermeldung: "+errors[i].ErrorText+"\n";
866                   }
867               }
868            }
869        }
870
871
872
873        #region IPlugin Member
874
875        public void Dispose()
876        {
877           
878        }
879
880        public void Execute()
881        {
882           
883           
884        }
885
886        public void Initialize()
887        {
888           // if (presentation.textBox1.Text != null)
889                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
890                {presentation.richTextBox1.AppendText(this.WebServiceSettings.UserCode);
891                   
892                }, null);
893                if (this.WebServiceSettings.Compiled == true)
894                {
895                    this.presentation.compile();
896                }
897           
898        }
899
900        public void showError(string message)
901        {
902            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, NotificationLevel.Error));
903        }
904
905        public void showWarning(string message)
906        {
907            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, NotificationLevel.Warning));
908        }
909
910        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
911
912        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
913
914        public event StatusChangedEventHandler OnPluginStatusChanged;
915
916        public void Pause()
917        {
918           
919        }
920
921        public void PostExecution()
922        {
923           
924        }
925
926        public void PreExecution()
927        {
928           
929        }
930
931        public System.Windows.Controls.UserControl Presentation
932        {
933            get { return this.presentation; }
934        }
935
936        public System.Windows.Controls.UserControl QuickWatchPresentation
937        {
938            get { return this.quickWatch; }
939        }
940
941        public ISettings Settings
942        {
943            get { return this.settings; }
944        }
945
946        public void Stop()
947        {
948           
949        }
950
951        #endregion
952
953        #region INotifyPropertyChanged Member
954
955        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
956        protected void OnPropertyChanged(string name)
957        {
958            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
959       
960        }
961        #endregion
962    }
963
964
965
966}
Note: See TracBrowser for help on using the repository browser.