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

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

minor changes (assembly version etc.)

File size: 38.2 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;
33
34
35
36//using Microsoft.Web.Services3.Messaging;
37
38
39namespace WebService
40{
41    [Author("Tim Podeszwa", "tim.podeszwa@student.uni-siegen.de", "Uni Siegen", "http://www.uni-siegen.de")]
42    [PluginInfo(false, "WebService", "Represents a Web Service", "", "WebService/webservice.png")]
43    public class WebService:IThroughput
44    {
45        private ISettings settings = new WebServiceSettings();
46        public WebServicePresentation presentation;
47        private WebServiceQuickWatchPresentation quickWatch;
48        public XmlDocument inputString, outputString, modifiedInput;
49        public Object service;
50        public string[] wsdlMethode;
51        public ServiceDescription serviceDescription;
52        public XmlDocument wsdlDocument, soapResponse;
53        public XmlNode node, envelope, body;
54        public string[] stringArray = new string[5];
55        public DataSet set;
56        public string eingabeparameter = "";
57        public string eingabeparameterString = "";
58        public string[] rückgabeparameter = new string[5];
59        public string methodName="";
60        public string webMethod = "";
61        private SignedXml signedXml;
62        private SignatureValidator validator;
63        private XmlSchemaCollection collection;
64        private string wsdl,publicRSAkey;
65
66        public RSACryptoServiceProvider provider;
67        public WebService()
68        {
69
70
71       
72         
73         
74           
75            wsdlDocument = new XmlDocument();
76            modifiedInput = new XmlDocument();
77          //  XmlSchema soapSchema = new XmlSchema();
78          //  XmlSchema signatureSchema = new XmlSchema();
79          //  string soapschema = Resource1.SoapSchema;
80          //  string signatureschema = Resource1.SignatureSchema;
81          //  string wsseSchema = Resource1.WSSESchema;
82          //  collection = new XmlSchemaCollection();
83          //  StringReader sreader = new StringReader(soapschema);
84          //  XmlTextReader reader = new XmlTextReader(sreader);
85          //  collection.Add("http://www.w3.org/2003/05/soap-envelope", reader);
86          // sreader = new StringReader(signatureschema);
87          //reader = new XmlTextReader(sreader);
88          //  collection.Add("http://www.w3.org/2000/09/xmldsig#", reader);
89          //  sreader = new StringReader(wsseSchema);
90          //  reader = new XmlTextReader(sreader);
91          //  collection.Add("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", reader);
92
93
94   
95           
96           // XmlSchema schema = (XmlSchema)obj;
97            wsdlMethode = new string[1];
98            wsdlMethode[0]="\n" + @"   
99            public ServiceDescription getWsdl(){
100            ServiceDescription s1;
101            ServiceDescriptionReflector serviceDescriptionReflector = new ServiceDescriptionReflector();
102            serviceDescriptionReflector.Reflect(typeof(Service), null);
103            System.IO.StringWriter stringWriter = new System.IO.StringWriter();
104            serviceDescriptionReflector.ServiceDescriptions[0].Write(stringWriter);
105            s1 = serviceDescriptionReflector.ServiceDescriptions[0];
106            XmlSchema schema = s1.Types.Schemas[0];
107            string theWsdl = stringWriter.ToString();
108            return s1;
109            }}";
110
111           
112         
113            stringArray[0] = @" using System;
114            using System.Web;
115            using System.Web.Services;
116            using System.Web.Services.Protocols;
117            using System.Web.Services.Description;
118            using System.Xml;
119            using System.Xml.Schema;
120            using System.IO;";
121
122            stringArray[1] = @"
123           
124            public class Service : System.Web.Services.WebService
125            {
126              public Service()
127             {
128     
129              }";
130            stringArray[2] = @"[WebMethod]";
131            this.PropertyChanged += new PropertyChangedEventHandler(WebService_PropertyChanged);
132            this.presentation = new WebServicePresentation(this);
133      //      this.quickWatch = new WebServiceQuickWatchPresentation();
134            settings.PropertyChanged += new PropertyChangedEventHandler(settings_PropertyChanged);
135            this.WebServiceSettings.Test = 1;
136            this.WebServiceSettings.Integer = 1;
137            this.WebServiceSettings.MethodName = "methodName";
138            OnGuiLogNotificationOccured += new GuiLogNotificationEventHandler(WebService_OnGuiLogNotificationOccured);
139            CspParameters parameters = new CspParameters();
140            parameters.KeyContainerName = "Container";
141            provider = new RSACryptoServiceProvider(parameters);
142           
143        }
144
145        void WebService_OnGuiLogNotificationOccured(IPlugin sender, GuiLogEventArgs args)
146        {
147            int n =5;
148        }
149
150        void WebService_PropertyChanged(object sender, PropertyChangedEventArgs e)
151        {
152            if (e.PropertyName == "InputString")
153            {
154                this.checkSoap();
155                if (this.inputString != null)
156                {
157                    presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
158                    {
159                        this.presentation.resetSoapInputItem();
160
161                        this.presentation.namespacesTable.Clear();
162                        this.presentation.CopyXmlToTreeView(this.inputString.ChildNodes[1], ref this.presentation.soapInput,false);
163                       
164                       
165                        this.presentation.treeView4.Items.Add(this.presentation.soapInput);
166                        this.presentation.findItem(presentation.soapInput, "Envelope",1).IsExpanded = true;
167                        this.presentation.findItem(presentation.soapInput,"Header",1).IsExpanded=true;
168                        this.presentation.findItem(presentation.soapInput, "Security",1).IsExpanded = true;
169                        this.presentation.findItem(presentation.soapInput, "Signature",1).IsExpanded = true;
170                        this.presentation.findItem(presentation.soapInput, "Body",1).IsExpanded = true;
171                        this.presentation.treeView4.Items.Refresh();
172                       
173                    }, null);
174                   
175                }
176                }
177        }
178        public void createKey()
179        {
180            CspParameters parameters= new CspParameters();
181            parameters.KeyContainerName = "Container";
182            provider = new RSACryptoServiceProvider(parameters);
183            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Schlüsselpaar erfolgreich erstellt", this, NotificationLevel.Info));
184
185         
186
187        }
188        public string exportPublicKey()
189        {
190            if(provider!=null)
191            {
192                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Öffentlicher Schlüssel exportiert", this, NotificationLevel.Info));
193             return   provider.ToXmlString(false);
194            }
195            return "";
196        }
197        void settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
198        {
199            WebServiceSettings s = (WebServiceSettings)sender;
200            if(e.PropertyName.Equals("createKey"))
201            {
202                this.createKey();
203           
204
205            }
206            if (e.PropertyName.Equals("publishKey"))
207            {
208                this.publicKey = this.exportPublicKey();
209            }
210            if (e.PropertyName.Equals("exportWSDL"))
211            {
212                this.Wsdl=wsdlDocument;
213            }
214            if (e.PropertyName.Equals("MethodenStub"))
215            {
216               
217               
218                this.WebServiceSettings.Integer = 1;
219                this.WebServiceSettings.String = 0;
220                this.WebServiceSettings.Test = 4;
221                this.WebServiceSettings.Double = 2;
222                this.WebServiceSettings.MethodName = "berechneVerzinsung";
223             
224               
225                if (presentation.textBlock1.Inlines != null)
226                {
227                    presentation.textBlock1.Inlines.Clear();
228                }
229             
230                this.presentation.textBlock1.Inlines.Add(new Bold(new Run(stringArray[2].ToString()+"\n")));
231                this.presentation.visualMethodName(WebServiceSettings.MethodName) ;
232                this.presentation.visualReturnParam("double");
233         
234               
235                this.presentation.richTextBox1.Document.Blocks.Clear();
236                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;") ;
237           
238            }
239
240            else
241            {
242                if (e.PropertyName.Equals("Test"))
243                {
244                    rückgabeparameter[0] = "void";
245                    rückgabeparameter[1] = "int";
246                    rückgabeparameter[2] = "string";
247                    rückgabeparameter[3] = "float";
248                       rückgabeparameter[4] = "double";
249                    this.presentation.visualReturnParam(rückgabeparameter[s.Test]);
250                }
251                 
252             
253                   
254             
255                if (e.PropertyName.Equals("Integer"))
256                {
257                    if (s.Integer == 1)
258                    {
259                       
260                        this.presentation.visualParam("int",1);
261                    }
262                    if (s.Integer == 2)
263                    {
264                         this.presentation.visualParam("int",2);
265                    }
266                    if (s.Integer == 0)
267                    {
268                        this.presentation.visualParam("int", 0);
269                    }
270
271                }
272                if (e.PropertyName.Equals("String"))
273                {
274                    if (s.String == 1)
275                    {
276                        this.presentation.visualParam("string", 1);
277                    }
278                    if (s.String == 2)
279                    {
280
281                        this.presentation.visualParam("string", 2);
282                        }
283                   
284                    if (s.String == 0)
285                    {
286                        this.presentation.visualParam("string", 0);
287                    }
288                }
289                if (e.PropertyName.Equals("Double"))
290                {
291                    if (s.Double == 1)
292                    {
293                        this.presentation.visualParam("double", 1);
294                    }
295                    if (s.Double == 2)
296                    {
297
298                        this.presentation.visualParam("double", 2);
299                    }
300
301                    if (s.Double == 0)
302                    {
303                        this.presentation.visualParam("double", 0);
304                    }
305                }
306
307
308                if (e.PropertyName.Equals("MethodName"))
309                {
310                    this.methodName = s.MethodName;
311                    this.presentation.visualMethodName(s.MethodName);
312                }
313             
314                {
315                    string komma = "";
316                    if(!eingabeparameter.Equals("")){
317                        komma=",";
318                    }
319                    if(eingabeparameterString.Equals("")){
320                        komma="";
321                    }
322                    stringArray[3] = @"public" + " " + rückgabeparameter[s.Test] + " " + methodName + "(" + "" + eingabeparameter +komma+ eingabeparameterString+")\n{";
323
324                } StringBuilder code = new StringBuilder();
325
326                code.Append(stringArray[0]);
327                code.Append(stringArray[1]);
328                code.Append(stringArray[2]);
329                code.Append(stringArray[3]);
330             
331     
332             
333            }   
334        }
335        public int getSignatureNumber()
336        {
337            return this.inputString.GetElementsByTagName("ds:Signature").Count;
338
339        }
340       
341        public bool checkSignature()
342        {
343            XmlDocument neu = new XmlDocument();
344        //   this.inputString.Save(@"C:\Users\Tim\Desktop\test.xml");
345           XmlNodeList signatureElements = this.inputString.GetElementsByTagName("Signature");
346           XmlElement signaturElement = (XmlElement)signatureElements.Item(0);
347           SignedXml signedXml = new SignedXml(this.inputString);
348           signedXml.LoadXml(signaturElement);
349           bool test = signedXml.CheckSignature();
350            return test;
351        }
352        public void readDescription()
353        {
354            set = new DataSet();
355            XmlSchema paramsSchema = this.serviceDescription.Types.Schemas[0];
356         //   this.collection.Add(paramsSchema);
357            StringWriter schemaStringWriter = new StringWriter();
358            paramsSchema.Write(schemaStringWriter);
359            StringReader sreader = new StringReader(schemaStringWriter.ToString());
360            XmlTextReader xmlreader = new XmlTextReader(sreader);
361            set.ReadXmlSchema(xmlreader);
362
363        }
364       // private bool checkSchema()
365       // {
366       //     XmlSchema soapSchema = collection["http://www.w3.org/2003/05/soap-envelope"];
367       //     XmlSchema paramsSchema = collection["http://tempuri.org/"];
368       //     XmlSchema signatureSchema = collection["http://www.w3.org/2000/09/xmldsig#"];
369       //     XmlSchema wsseSchema = collection["http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"];
370       //     string xmlString= this.inputString.InnerXml;
371       //     StringReader stringReader= new StringReader(xmlString);
372       //     XmlTextReader xmlreader = new XmlTextReader(stringReader);
373       //     XmlValidatingReader validatingReader = new XmlValidatingReader(xmlreader);
374       //     validatingReader.Schemas.Add(collection);
375       //     validatingReader.ValidationEventHandler += new ValidationEventHandler(validatingReader_ValidationEventHandler);
376       //     validatingReader.ValidationType = System.Xml.ValidationType.Schema;
377       //     XmlDocument inputStringClone = (XmlDocument)this.inputString.Clone();
378       //     inputStringClone.Schemas.Add(soapSchema);
379       //     inputStringClone.Schemas.Add(signatureSchema);
380       //     inputStringClone.Schemas.Add(wsseSchema);
381       //     inputStringClone.Schemas.Add(paramsSchema);
382       //     try
383       //     {
384       //         inputStringClone.Load(validatingReader);
385
386       //     inputStringClone.Validate(validatingReader_ValidationEventHandler);
387       //     }
388       //     catch (Exception exception)
389       //     {
390       //         validatingReader.Close();
391       //         return false;
392       //     }
393       //     validatingReader.Close();
394       //     return true;
395       // }
396
397       //void validatingReader_ValidationEventHandler(object sender, ValidationEventArgs e)
398       // {
399       //     switch (e.Severity)
400       //     {
401       //         case XmlSeverityType.Error:
402       //             Console.WriteLine("Error: {0}", e.Message);
403       //             break;
404       //         case XmlSeverityType.Warning:
405       //             Console.WriteLine("Warning {0}", e.Message);
406       //             break;
407       //     }
408       // }
409       private bool compiled()
410       {
411           if (serviceDescription == null)
412           {
413               EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
414               return false;
415           }
416           return true;
417       }
418        public SignatureValidator getValidator()
419        {
420            return this.validator;
421        }
422        private void checkSoap()
423        {
424            bool signatureValid = true;
425           // this.checkSchema();
426            this.compiled();
427            if (this.inputString.GetElementsByTagName("ds:Signature") != null)
428            {
429
430                validator = new SignatureValidator(this);
431            }
432            signatureValid = validator.valid;
433         
434            object test2 = new object();
435            object[] array = null;
436            string response;
437            if (serviceDescription == null)
438            {
439                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
440            }
441            else
442            {
443                if (!signatureValid)
444                {
445                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Signature Validation failed", this, NotificationLevel.Error));
446                    goto Abbruch;
447                }
448
449                Types types = this.serviceDescription.Types;
450                PortTypeCollection portTypes = this.serviceDescription.PortTypes;
451                MessageCollection messages = this.serviceDescription.Messages;
452                PortType porttype = portTypes[0];
453                Operation operation = porttype.Operations[0];
454                OperationOutput output = operation.Messages[0].Operation.Messages.Output;
455                OperationInput input = operation.Messages[0].Operation.Messages.Input;
456                Message messageOutput = messages[output.Message.Name];
457                Message messageInput = messages[input.Message.Name];
458                MessagePart messageOutputPart = messageOutput.Parts[0];
459                MessagePart messageInputPart = messageInput.Parts[0];
460                XmlSchema xmlSchema = types.Schemas[0];
461
462
463                XmlSchemaElement outputSchema = (XmlSchemaElement)xmlSchema.Elements[messageOutputPart.Element];
464                XmlSchemaElement inputSchema = (XmlSchemaElement)xmlSchema.Elements[messageInputPart.Element];
465
466                XmlSchemaComplexType complexTypeOutput = (XmlSchemaComplexType)outputSchema.SchemaType;
467                XmlSchemaSequence sequenzTypeOutput = (XmlSchemaSequence)complexTypeOutput.Particle;
468
469                XmlSchemaComplexType complexTypeInput = (XmlSchemaComplexType)inputSchema.SchemaType;
470                XmlSchemaSequence sequenzTypeInput = (XmlSchemaSequence)complexTypeInput.Particle;
471
472                Hashtable paramTypesTable = new Hashtable();
473                StringWriter twriter = new StringWriter();
474                //  TextWriter writer= new TextWriter(twriter);
475                xmlSchema.Write(twriter);
476
477               
478                set = new DataSet();
479                StringReader sreader = new StringReader(twriter.ToString());
480                XmlTextReader xmlreader = new XmlTextReader(sreader);
481                set.ReadXmlSchema(xmlreader);
482                if (sequenzTypeInput != null)
483                {
484                    foreach (XmlSchemaElement inputParam in sequenzTypeInput.Items)
485                    {
486                        XmlQualifiedName schemaName = inputParam.SchemaTypeName;
487                        paramTypesTable.Add(inputParam.QualifiedName.Name, schemaName.Name);
488                    }
489
490                   
491
492               
493                   
494                    XmlDocument t = new XmlDocument();
495
496               
497                    XmlNamespaceManager manager = new XmlNamespaceManager(this.modifiedInput.NameTable);
498                    XmlElement b = (XmlElement)this.inputString.GetElementsByTagName("s:Body")[0];
499                    manager.AddNamespace("s", b.NamespaceURI);
500                    manager.AddNamespace("tns", "http://tempuri.org/");
501                    XmlNode node = this.modifiedInput.SelectSingleNode("s:Envelope/s:Body/" + "tns:" + set.Tables[0].TableName, manager);
502                    XmlElement ele = (XmlElement)node; 
503                  //XmlElement ele2 = (XmlElement)this.modifiedInput.GetElementsByTagName(set.Tables[0].TableName, fsdf.TargetNamespace)[0];
504                    //   object test = service.GetType().InvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, service,);
505                    int n = new Int32();
506                    try
507                    {
508                       
509                   
510                        n = ele.ChildNodes.Count;
511
512                    }
513
514                    catch
515                    {
516                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
517                    }
518                    if (n != 0)
519                    {
520                        array = new Object[n];
521
522                        for (int i = 0; i < n; i++)
523                        {
524                            string param = ele.ChildNodes[i].InnerText;
525                            Object paramType = paramTypesTable[ele.ChildNodes[i].LocalName];
526                            if (paramType.ToString().Equals("int"))
527                            {
528                                if (!ele.ChildNodes[i].InnerText.Equals(""))
529                                {
530                                    try
531                                    {
532                                        array[i] = Convert.ToInt32((Object)ele.ChildNodes[i].InnerText);
533                                    }
534                                    catch(Exception e) 
535                                    {
536                                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
537                                        goto Abbruch;
538                                    }
539                                }
540                                else { EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
541                                goto Abbruch;
542                               
543                                }
544                            }
545                            if (paramType.ToString().Equals("string"))
546                            {
547                                try
548                                {
549                                    array[i] = Convert.ToString((Object)ele.ChildNodes[i].InnerText);
550                                }
551                                catch (Exception e)
552                                {
553                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
554                                    goto Abbruch;
555                                }
556                            }
557                            if (paramType.ToString().Equals("double"))
558                            {
559                                try
560                                {
561                                    array[i] = Convert.ToDouble((Object)ele.ChildNodes[i].InnerText);
562
563                                }
564                                catch (Exception e)
565                                {
566                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
567                                    goto Abbruch;
568                                }
569                            }
570
571                        }
572
573                        //object test2 = service.GetType().getmInvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, null, array);
574                          for(int i =0;i<array.Length;i++)
575                        {
576                            if (array[i] == null)
577                            {goto Abbruch;
578                             
579                            }
580                        }
581                        try
582                        {   
583                            Type typ = service.GetType().GetMethod(operation.Name).ReturnType;
584                            string returnType = typ.ToString();
585                            if (!returnType.Equals("System.Void"))
586                            {
587                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString();
588                            }
589                            else { service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString(); }
590                        }
591                        catch(Exception e)
592                        {
593                            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
594                            goto Abbruch;
595                        }
596                        }
597                     
598                   
599                    else
600                    {
601                        if (sequenzTypeOutput != null)
602                        {
603                            try
604                            {
605                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, null).ToString();
606                            }
607                            catch(Exception e)
608                            {
609                                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
610                                goto Abbruch;
611                            }
612                        }
613                        else { service.GetType().GetMethod(operation.Name).Invoke(service, array); }
614                    }
615                    response = test2.ToString();
616                    this.createResponse(response);
617
618           
619                   
620                       
621                   
622                }
623            }
624        Abbruch: ;
625        }
626        public void createResponse(string response)
627        {
628            soapResponse = new XmlDocument();
629            node = soapResponse.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
630
631            soapResponse.AppendChild(node);
632            envelope = soapResponse.CreateElement("Envelope", "http://www.w3.org/2001/12/soap-envelope");
633
634
635            soapResponse.AppendChild(envelope);
636
637            body = soapResponse.CreateElement("Body", "http://www.w3.org/2001/12/soap-envelope");
638            XmlNode eingabe = soapResponse.CreateElement(set.Tables[1].ToString(), set.Tables[1].Namespace);
639            DataTable table = set.Tables[1];
640            foreach (DataColumn tempColumn in table.Columns)
641            {
642                XmlNode neu = soapResponse.CreateElement(tempColumn.ColumnName, set.Tables[1].Namespace);
643                neu.InnerText = response;
644                eingabe.AppendChild(neu);
645            }
646            body.AppendChild(eingabe);
647            envelope.AppendChild(body);
648            this.OutputString = soapResponse;
649        }
650        [PropertyInfo(Direction.InputData, "SOAP input", "Input a SOAP message to be processed by the Web Service", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text,"XmlConverter")]
651        public XmlDocument InputString
652        {
653            get { return this.inputString; }
654            set
655            {
656               
657                    this.inputString = value;
658                    OnPropertyChanged("InputString");
659               
660            }
661
662        }
663       
664        [PropertyInfo(Direction.ControlMaster,"Public-Key output", "Encryption Key",null,DisplayLevel.Beginner)]
665      public string publicKey
666    {
667        get
668        {
669
670            return this.publicRSAkey;
671       
672        }
673        set 
674        { this.publicRSAkey = value;
675        OnPropertyChanged("publicKey");
676        }
677           
678    }
679
680        [PropertyInfo(Direction.ControlMaster, "WSDL output", "Web Service Description", null, DisplayLevel.Beginner)]
681        public XmlDocument Wsdl
682        {
683            get { return this.wsdlDocument; }
684            set
685            {
686                this.wsdlDocument = value;
687                OnPropertyChanged("Wsdl");
688            }
689        }
690        [PropertyInfo(Direction.InputData, "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}
Note: See TracBrowser for help on using the repository browser.