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

Last change on this file since 1218 was 1218, checked in by Tim Podeszwa, 12 years ago

controller propertie added

File size: 39.5 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,publicRSAkey;
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               // this.publicKey = this.exportPublicKey();
210                if (PublicKeyControl != null)
211                {
212                    PublicKeyControl.setPublicKey(this.exportPublicKey());
213                }
214            }
215            if (e.PropertyName.Equals("exportWSDL"))
216            {   if(Control!=null)
217                Control.setWsdl(this.Wsdl);
218            }
219            if (e.PropertyName.Equals("MethodenStub"))
220            {
221               
222               
223                this.WebServiceSettings.Integer = 1;
224                this.WebServiceSettings.String = 0;
225                this.WebServiceSettings.Test = 4;
226                this.WebServiceSettings.Double = 2;
227                this.WebServiceSettings.MethodName = "berechneVerzinsung";
228             
229               
230                if (presentation.textBlock1.Inlines != null)
231                {
232                    presentation.textBlock1.Inlines.Clear();
233                }
234             
235                this.presentation.textBlock1.Inlines.Add(new Bold(new Run(stringArray[2].ToString()+"\n")));
236                this.presentation.visualMethodName(WebServiceSettings.MethodName) ;
237                this.presentation.visualReturnParam("double");
238         
239               
240                this.presentation.richTextBox1.Document.Blocks.Clear();
241                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;") ;
242           
243            }
244
245            else
246            {
247                if (e.PropertyName.Equals("Test"))
248                {
249                    rückgabeparameter[0] = "void";
250                    rückgabeparameter[1] = "int";
251                    rückgabeparameter[2] = "string";
252                    rückgabeparameter[3] = "float";
253                       rückgabeparameter[4] = "double";
254                    this.presentation.visualReturnParam(rückgabeparameter[s.Test]);
255                }
256                 
257             
258                   
259             
260                if (e.PropertyName.Equals("Integer"))
261                {
262                    if (s.Integer == 1)
263                    {
264                       
265                        this.presentation.visualParam("int",1);
266                    }
267                    if (s.Integer == 2)
268                    {
269                         this.presentation.visualParam("int",2);
270                    }
271                    if (s.Integer == 0)
272                    {
273                        this.presentation.visualParam("int", 0);
274                    }
275
276                }
277                if (e.PropertyName.Equals("String"))
278                {
279                    if (s.String == 1)
280                    {
281                        this.presentation.visualParam("string", 1);
282                    }
283                    if (s.String == 2)
284                    {
285
286                        this.presentation.visualParam("string", 2);
287                        }
288                   
289                    if (s.String == 0)
290                    {
291                        this.presentation.visualParam("string", 0);
292                    }
293                }
294                if (e.PropertyName.Equals("Double"))
295                {
296                    if (s.Double == 1)
297                    {
298                        this.presentation.visualParam("double", 1);
299                    }
300                    if (s.Double == 2)
301                    {
302
303                        this.presentation.visualParam("double", 2);
304                    }
305
306                    if (s.Double == 0)
307                    {
308                        this.presentation.visualParam("double", 0);
309                    }
310                }
311
312
313                if (e.PropertyName.Equals("MethodName"))
314                {
315                    this.methodName = s.MethodName;
316                    this.presentation.visualMethodName(s.MethodName);
317                }
318             
319                {
320                    string komma = "";
321                    if(!eingabeparameter.Equals("")){
322                        komma=",";
323                    }
324                    if(eingabeparameterString.Equals("")){
325                        komma="";
326                    }
327                    stringArray[3] = @"public" + " " + rückgabeparameter[s.Test] + " " + methodName + "(" + "" + eingabeparameter +komma+ eingabeparameterString+")\n{";
328
329                } StringBuilder code = new StringBuilder();
330
331                code.Append(stringArray[0]);
332                code.Append(stringArray[1]);
333                code.Append(stringArray[2]);
334                code.Append(stringArray[3]);
335             
336     
337             
338            }   
339        }
340        public int getSignatureNumber()
341        {
342            return this.inputString.GetElementsByTagName("ds:Signature").Count;
343
344        }
345       
346        public bool checkSignature()
347        {
348            XmlDocument neu = new XmlDocument();
349        //   this.inputString.Save(@"C:\Users\Tim\Desktop\test.xml");
350           XmlNodeList signatureElements = this.inputString.GetElementsByTagName("Signature");
351           XmlElement signaturElement = (XmlElement)signatureElements.Item(0);
352           SignedXml signedXml = new SignedXml(this.inputString);
353           signedXml.LoadXml(signaturElement);
354           bool test = signedXml.CheckSignature();
355            return test;
356        }
357        public void readDescription()
358        {
359            set = new DataSet();
360            XmlSchema paramsSchema = this.serviceDescription.Types.Schemas[0];
361         //   this.collection.Add(paramsSchema);
362            StringWriter schemaStringWriter = new StringWriter();
363            paramsSchema.Write(schemaStringWriter);
364            StringReader sreader = new StringReader(schemaStringWriter.ToString());
365            XmlTextReader xmlreader = new XmlTextReader(sreader);
366            set.ReadXmlSchema(xmlreader);
367
368        }
369       // private bool checkSchema()
370       // {
371       //     XmlSchema soapSchema = collection["http://www.w3.org/2003/05/soap-envelope"];
372       //     XmlSchema paramsSchema = collection["http://tempuri.org/"];
373       //     XmlSchema signatureSchema = collection["http://www.w3.org/2000/09/xmldsig#"];
374       //     XmlSchema wsseSchema = collection["http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"];
375       //     string xmlString= this.inputString.InnerXml;
376       //     StringReader stringReader= new StringReader(xmlString);
377       //     XmlTextReader xmlreader = new XmlTextReader(stringReader);
378       //     XmlValidatingReader validatingReader = new XmlValidatingReader(xmlreader);
379       //     validatingReader.Schemas.Add(collection);
380       //     validatingReader.ValidationEventHandler += new ValidationEventHandler(validatingReader_ValidationEventHandler);
381       //     validatingReader.ValidationType = System.Xml.ValidationType.Schema;
382       //     XmlDocument inputStringClone = (XmlDocument)this.inputString.Clone();
383       //     inputStringClone.Schemas.Add(soapSchema);
384       //     inputStringClone.Schemas.Add(signatureSchema);
385       //     inputStringClone.Schemas.Add(wsseSchema);
386       //     inputStringClone.Schemas.Add(paramsSchema);
387       //     try
388       //     {
389       //         inputStringClone.Load(validatingReader);
390
391       //     inputStringClone.Validate(validatingReader_ValidationEventHandler);
392       //     }
393       //     catch (Exception exception)
394       //     {
395       //         validatingReader.Close();
396       //         return false;
397       //     }
398       //     validatingReader.Close();
399       //     return true;
400       // }
401
402       //void validatingReader_ValidationEventHandler(object sender, ValidationEventArgs e)
403       // {
404       //     switch (e.Severity)
405       //     {
406       //         case XmlSeverityType.Error:
407       //             Console.WriteLine("Error: {0}", e.Message);
408       //             break;
409       //         case XmlSeverityType.Warning:
410       //             Console.WriteLine("Warning {0}", e.Message);
411       //             break;
412       //     }
413       // }
414       private bool compiled()
415       {
416           if (serviceDescription == null)
417           {
418               EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
419               return false;
420           }
421           return true;
422       }
423        public SignatureValidator getValidator()
424        {
425            return this.validator;
426        }
427        private void checkSoap()
428        {
429            bool signatureValid = true;
430           // this.checkSchema();
431            this.compiled();
432            if (this.inputString == null)
433                return;
434            if (this.inputString.GetElementsByTagName("ds:Signature") != null)
435            {
436
437                validator = new SignatureValidator(this);
438            }
439            signatureValid = validator.valid;
440         
441            object test2 = new object();
442            object[] array = null;
443            string response;
444            if (serviceDescription == null)
445            {
446                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es liegt keine Service Beschreibung vor. Wurde der Web Service nicht kompiliert?", this, NotificationLevel.Error));
447            }
448            else
449            {
450                if (!signatureValid)
451                {
452                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Signature Validation failed", this, NotificationLevel.Error));
453                    goto Abbruch;
454                }
455
456                Types types = this.serviceDescription.Types;
457                PortTypeCollection portTypes = this.serviceDescription.PortTypes;
458                MessageCollection messages = this.serviceDescription.Messages;
459                PortType porttype = portTypes[0];
460                Operation operation = porttype.Operations[0];
461                OperationOutput output = operation.Messages[0].Operation.Messages.Output;
462                OperationInput input = operation.Messages[0].Operation.Messages.Input;
463                Message messageOutput = messages[output.Message.Name];
464                Message messageInput = messages[input.Message.Name];
465                MessagePart messageOutputPart = messageOutput.Parts[0];
466                MessagePart messageInputPart = messageInput.Parts[0];
467                XmlSchema xmlSchema = types.Schemas[0];
468
469
470                XmlSchemaElement outputSchema = (XmlSchemaElement)xmlSchema.Elements[messageOutputPart.Element];
471                XmlSchemaElement inputSchema = (XmlSchemaElement)xmlSchema.Elements[messageInputPart.Element];
472
473                XmlSchemaComplexType complexTypeOutput = (XmlSchemaComplexType)outputSchema.SchemaType;
474                XmlSchemaSequence sequenzTypeOutput = (XmlSchemaSequence)complexTypeOutput.Particle;
475
476                XmlSchemaComplexType complexTypeInput = (XmlSchemaComplexType)inputSchema.SchemaType;
477                XmlSchemaSequence sequenzTypeInput = (XmlSchemaSequence)complexTypeInput.Particle;
478
479                Hashtable paramTypesTable = new Hashtable();
480                StringWriter twriter = new StringWriter();
481                //  TextWriter writer= new TextWriter(twriter);
482                xmlSchema.Write(twriter);
483
484               
485                set = new DataSet();
486                StringReader sreader = new StringReader(twriter.ToString());
487                XmlTextReader xmlreader = new XmlTextReader(sreader);
488                set.ReadXmlSchema(xmlreader);
489                if (sequenzTypeInput != null)
490                {
491                    foreach (XmlSchemaElement inputParam in sequenzTypeInput.Items)
492                    {
493                        XmlQualifiedName schemaName = inputParam.SchemaTypeName;
494                        paramTypesTable.Add(inputParam.QualifiedName.Name, schemaName.Name);
495                    }
496
497                   
498
499               
500                   
501                    XmlDocument t = new XmlDocument();
502
503               
504                    XmlNamespaceManager manager = new XmlNamespaceManager(this.modifiedInput.NameTable);
505                    XmlElement b = (XmlElement)this.inputString.GetElementsByTagName("s:Body")[0];
506                    manager.AddNamespace("s", b.NamespaceURI);
507                    manager.AddNamespace("tns", "http://tempuri.org/");
508                    XmlNode node = this.modifiedInput.SelectSingleNode("s:Envelope/s:Body/" + "tns:" + set.Tables[0].TableName, manager);
509                    XmlElement ele = (XmlElement)node; 
510                  //XmlElement ele2 = (XmlElement)this.modifiedInput.GetElementsByTagName(set.Tables[0].TableName, fsdf.TargetNamespace)[0];
511                    //   object test = service.GetType().InvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, service,);
512                    int n = new Int32();
513                    try
514                    {
515                       
516                   
517                        n = ele.ChildNodes.Count;
518
519                    }
520
521                    catch
522                    {
523                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
524                    }
525                    if (n != 0)
526                    {
527                        array = new Object[n];
528
529                        for (int i = 0; i < n; i++)
530                        {
531                            string param = ele.ChildNodes[i].InnerText;
532                            Object paramType = paramTypesTable[ele.ChildNodes[i].LocalName];
533                            if (paramType.ToString().Equals("int"))
534                            {
535                                if (!ele.ChildNodes[i].InnerText.Equals(""))
536                                {
537                                    try
538                                    {
539                                        array[i] = Convert.ToInt32((Object)ele.ChildNodes[i].InnerText);
540                                    }
541                                    catch(Exception e) 
542                                    {
543                                        EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
544                                        goto Abbruch;
545                                    }
546                                }
547                                else { EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs("Es wurden nicht alle Parameter übergeben!", this, NotificationLevel.Error));
548                                goto Abbruch;
549                               
550                                }
551                            }
552                            if (paramType.ToString().Equals("string"))
553                            {
554                                try
555                                {
556                                    array[i] = Convert.ToString((Object)ele.ChildNodes[i].InnerText);
557                                }
558                                catch (Exception e)
559                                {
560                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
561                                    goto Abbruch;
562                                }
563                            }
564                            if (paramType.ToString().Equals("double"))
565                            {
566                                try
567                                {
568                                    array[i] = Convert.ToDouble((Object)ele.ChildNodes[i].InnerText);
569
570                                }
571                                catch (Exception e)
572                                {
573                                    EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
574                                    goto Abbruch;
575                                }
576                            }
577
578                        }
579
580                        //object test2 = service.GetType().getmInvokeMember(operation.Name, System.Reflection.BindingFlags.InvokeMethod, null, null, array);
581                          for(int i =0;i<array.Length;i++)
582                        {
583                            if (array[i] == null)
584                            {goto Abbruch;
585                             
586                            }
587                        }
588                        try
589                        {   
590                            Type typ = service.GetType().GetMethod(operation.Name).ReturnType;
591                            string returnType = typ.ToString();
592                            if (!returnType.Equals("System.Void"))
593                            {
594                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString();
595                            }
596                            else { service.GetType().GetMethod(operation.Name).Invoke(service, array).ToString(); }
597                        }
598                        catch(Exception e)
599                        {
600                            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
601                            goto Abbruch;
602                        }
603                        }
604                     
605                   
606                    else
607                    {
608                        if (sequenzTypeOutput != null)
609                        {
610                            try
611                            {
612                                test2 = service.GetType().GetMethod(operation.Name).Invoke(service, null).ToString();
613                            }
614                            catch(Exception e)
615                            {
616                                EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(e.Message, this, NotificationLevel.Error));
617                                goto Abbruch;
618                            }
619                        }
620                        else { service.GetType().GetMethod(operation.Name).Invoke(service, array); }
621                    }
622                    response = test2.ToString();
623                    this.createResponse(response);
624
625           
626                   
627                       
628                   
629                }
630            }
631        Abbruch: ;
632        }
633        public void createResponse(string response)
634        {
635            soapResponse = new XmlDocument();
636            node = soapResponse.CreateXmlDeclaration("1.0", "ISO-8859-1", "yes");
637
638            soapResponse.AppendChild(node);
639            envelope = soapResponse.CreateElement("Envelope", "http://www.w3.org/2001/12/soap-envelope");
640
641
642            soapResponse.AppendChild(envelope);
643
644            body = soapResponse.CreateElement("Body", "http://www.w3.org/2001/12/soap-envelope");
645            XmlNode eingabe = soapResponse.CreateElement(set.Tables[1].ToString(), set.Tables[1].Namespace);
646            DataTable table = set.Tables[1];
647            foreach (DataColumn tempColumn in table.Columns)
648            {
649                XmlNode neu = soapResponse.CreateElement(tempColumn.ColumnName, set.Tables[1].Namespace);
650                neu.InnerText = response;
651                eingabe.AppendChild(neu);
652            }
653            body.AppendChild(eingabe);
654            envelope.AppendChild(body);
655            this.OutputString = soapResponse;
656        }
657        [PropertyInfo(Direction.InputData, "SOAP input", "Input a SOAP message to be processed by the Web Service", "", true, false, DisplayLevel.Beginner, QuickWatchFormat.Text,"XmlConverter")]
658        public XmlDocument InputString
659        {
660            get { return this.inputString; }
661            set
662            {
663               
664                    this.inputString = value;
665                    OnPropertyChanged("InputString");
666               
667            }
668
669        }
670       
671    //    [PropertyInfo(Direction.ControlMaster,"Public-Key output", "Encryption Key",null,DisplayLevel.Beginner)]
672      public string publicKey
673    {
674        get
675        {
676
677            return this.publicRSAkey;
678       
679        }
680        set 
681        { this.publicRSAkey = value;
682        OnPropertyChanged("publicKey");
683        }
684           
685    }
686        private IControlPublicKey publicKeyControl;
687        [PropertyInfo(Direction.ControlMaster, "Public-Key output", "Encryption Key", null, DisplayLevel.Beginner)]
688        public IControlPublicKey PublicKeyControl
689        {
690            get { return publicKeyControl; }
691            set
692            {
693                publicKeyControl = value;
694                publicKeyControl.setPublicKey(this.publicKey);
695            }
696        }
697        private IControlWsdl control;
698        [PropertyInfo(Direction.ControlMaster, "WSDL output", "Web Service Description", null, DisplayLevel.Beginner)]
699        public IControlWsdl Control
700        {
701            get { return control; }
702            set
703            {
704                /* Die Verbindung wurde hergestellt, Sie können ab jetzt Methoden aufrufen */
705                control = value;
706                control.setWsdl(this.wsdlDocument);
707            }
708        }
709
710      //  [PropertyInfo(Direction.ControlMaster, "WSDL output", "Web Service Description", null, DisplayLevel.Beginner)]
711        public XmlDocument Wsdl
712        {
713            get { return this.wsdlDocument; }
714            set
715            {
716                this.wsdlDocument = value;
717                control.setWsdl(this.wsdlDocument);
718                OnPropertyChanged("Wsdl");
719            }
720        }
721        [PropertyInfo(Direction.OutputData, "SOAP output", "Response from Web Service", "", false, false, DisplayLevel.Beginner, QuickWatchFormat.Text, "XmlOutputConverter")]
722        public XmlDocument OutputString
723        {
724            get { return this.outputString; }
725            set
726            {
727                this.outputString = value;
728                OnPropertyChanged("OutputString");
729            }
730
731
732        }
733        public Object XmlOutputConverter(Object Data)
734        {
735            string test = Data.ToString();
736
737            XmlDocument doc = (XmlDocument)this.outputString;
738            StringWriter stringWriter = new StringWriter();
739            Object obj = new Object();
740            try
741            {
742                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
743                xmlWriter.Formatting = Formatting.Indented;
744                doc.WriteContentTo(xmlWriter);
745                obj = (Object)stringWriter.ToString();
746            }
747            catch (Exception e)
748            {
749                Console.WriteLine(e.ToString());
750             
751            }
752
753
754            return obj;
755        }
756        public Object XmlConverter(Object Data)
757        {
758         
759           
760            XmlDocument doc = (XmlDocument)this.inputString;
761            StringWriter stringWriter = new StringWriter();
762            Object obj = new Object();
763            try
764            {
765                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
766                xmlWriter.Formatting = Formatting.Indented;
767                doc.WriteContentTo(xmlWriter);
768                obj = (Object)stringWriter.ToString();
769            }
770            catch (Exception e)
771            {Console.WriteLine(e.ToString());
772       
773            }
774 
775            return obj ;
776        }
777
778        public ServiceDescription description
779        {
780            get { return this.serviceDescription; }
781            set { this.serviceDescription = value; }
782        }
783        public WebServiceSettings  WebServiceSettings
784        {
785            get { return (WebServiceSettings) this.settings; }
786            set { this.settings = value; }
787        }
788        public ArrayList getSignatureReferences(int i)
789        {
790           return this.validator.getSignatureReferences(i);
791        }
792        public ArrayList getSignedXmlSignatureReferences()
793        {
794            return this.validator.getSignedXmlSignatureReferences();
795        }
796        public void compile(string code)
797        {
798            CSharpCodeProvider codeProvider = new CSharpCodeProvider(new Dictionary<String, String> { { "CompilerVersion", "v3.5" } });
799            string header = "";
800            presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
801                {
802                    header=this.presentation.copyContentToString(this.presentation.textBlock1);
803                   
804                }, null);
805            codeProvider.CreateGenerator();
806            CompilerParameters cp = new CompilerParameters();
807            cp.ReferencedAssemblies.Add("System.dll"); //includes
808            cp.ReferencedAssemblies.Add("System.Web.dll");
809            cp.ReferencedAssemblies.Add("System.Web.Services.dll");
810            cp.ReferencedAssemblies.Add("System.Xml.dll");
811            CompilerResults cr = null;
812            cp.GenerateExecutable = false;
813
814            try
815            {
816                Run methodDeclaration = null;
817                string wsdl = wsdlMethode[0];
818
819
820                cr = codeProvider.CompileAssemblyFromSource(cp, stringArray[0].ToString() + stringArray[1].ToString() + code + wsdl);
821
822                System.Reflection.Assembly a = cr.CompiledAssembly;
823                service = a.CreateInstance("Service");
824
825
826
827
828                object obj = service.GetType().InvokeMember("getWsdl", System.Reflection.BindingFlags.InvokeMethod, null, service, null);
829                ServiceDescription description = (ServiceDescription)obj;
830                System.IO.StringWriter stringWriter = new System.IO.StringWriter();
831
832                XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);
833                xmlWriter.Formatting = Formatting.Indented;
834                description.Write(xmlWriter);
835
836                string theWsdl = stringWriter.ToString();
837                presentation.showWsdl(theWsdl);
838                this.description = description;
839                StringReader stringReader = new StringReader(theWsdl);
840                XmlTextReader xmlReader = new XmlTextReader(stringReader);
841                wsdlDocument.LoadXml(theWsdl);
842                System.Windows.Controls.TreeViewItem xmlDecl = null;
843                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
844                {
845                    if (presentation.treeView1.HasItems)
846                    {
847                        xmlDecl = (System.Windows.Controls.TreeViewItem)presentation.treeView1.Items[0];
848                        if (xmlDecl.HasItems)
849                        {
850                            xmlDecl.Items.Clear();
851                        }
852                    }
853
854                }, null);
855                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
856                {
857                    presentation.CopyXmlToTreeView(wsdlDocument.ChildNodes[1], ref presentation.item,false);
858                    TreeView parent = (TreeView)presentation.item.Parent;
859
860                    if (parent != null)
861                    {
862                        int pos = parent.Items.IndexOf(presentation.item);
863                        parent.Items.RemoveAt(pos);
864                    }
865                     
866                    presentation.treeView1.Items.Add(presentation.item);
867                    presentation.item.IsExpanded = true;
868                    for (int i = 0; i < presentation.item.Items.Count; i++)
869                    {
870                        TreeViewItem item =(TreeViewItem) presentation.item.Items[i];
871                        item.IsExpanded = true;
872                    }
873                 
874                    presentation.textBox3.Text = "Erstellen erfolgreich";
875                    this.readDescription();
876                  //  presentation.fillElementTextBox();
877
878                }, null);
879               
880
881
882            }
883
884           
885           
886           
887         
888            catch (Exception exception)
889            { 
890               CompilerErrorCollection errors = cr.Errors;
891                int errorCounter= errors.Count;
892               if (errors != null)
893               {
894                   for (int i = 0; i < errorCounter; i++)
895                   {
896                       this.presentation.textBox3.Text+="Fehlermeldung: "+errors[i].ErrorText+"\n";
897                   }
898               }
899            }
900        }
901
902
903
904        #region IPlugin Member
905
906        public void Dispose()
907        {
908           
909        }
910
911        public void Execute()
912        {
913           
914           
915        }
916
917        public void Initialize()
918        {
919           // if (presentation.textBox1.Text != null)
920                presentation.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
921                {presentation.richTextBox1.AppendText(this.WebServiceSettings.UserCode);
922                   
923                }, null);
924                if (this.WebServiceSettings.Compiled == true)
925                {
926                    this.presentation.compile();
927                }
928           
929        }
930
931        public void showError(string message)
932        {
933            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, NotificationLevel.Error));
934        }
935
936        public void showWarning(string message)
937        {
938            EventsHelper.GuiLogMessage(OnGuiLogNotificationOccured, this, new GuiLogEventArgs(message, this, NotificationLevel.Warning));
939        }
940
941        public event GuiLogNotificationEventHandler OnGuiLogNotificationOccured;
942
943        public event PluginProgressChangedEventHandler OnPluginProgressChanged;
944
945        public event StatusChangedEventHandler OnPluginStatusChanged;
946
947        public void Pause()
948        {
949           
950        }
951
952        public void PostExecution()
953        {
954           
955        }
956
957        public void PreExecution()
958        {
959           
960        }
961
962        public System.Windows.Controls.UserControl Presentation
963        {
964            get { return this.presentation; }
965        }
966
967        public System.Windows.Controls.UserControl QuickWatchPresentation
968        {
969            get { return this.quickWatch; }
970        }
971
972        public ISettings Settings
973        {
974            get { return this.settings; }
975        }
976
977        public void Stop()
978        {
979           
980        }
981
982        #endregion
983
984        #region INotifyPropertyChanged Member
985
986        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
987        protected void OnPropertyChanged(string name)
988        {
989            EventsHelper.PropertyChanged(PropertyChanged, this, new PropertyChangedEventArgs(name));
990       
991        }
992        #endregion
993    }
994
995
996
997}
Note: See TracBrowser for help on using the repository browser.