<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel xmlns:blog="http://www.dotnetnuke.com/blog/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
    <title>Marcels Blog</title>
    <description>Marcels Blog</description>
    <link>http://www.e-llusions.de/blogs/tabid/67/BlogId/1/Default.aspx</link>
    <language>de-DE</language>
    <webMaster />
    <pubDate>Mo, 06 Feb 2012 03:28:51 GMT</pubDate>
    <lastBuildDate>Mo, 06 Feb 2012 03:28:51 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 4.1.0.0</generator>
    <item>
      <title>Script# und Silverlight</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=57</link>
      <description>Nikhil Kothatis Script#-Projekt ermöglicht das Entwickeln von JavaScript-Seiten und -Bibliotheken in C# - auch in Verbindung mit Silverlight. Es gibt aber auch Stolpersteine.</description>
      <author />
      <comments>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=57#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=57</guid>
      <pubDate>Wed, 05 Dec 2007 10:23:28 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=57</trackback:ping>
    </item>
    <item>
      <title>Silverlight mit dynamischen Inhalten aus DotNetNuke</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=56</link>
      <description>Verblüffend einfach kann man Silverlight in DotNetNuke einbinden. Mit einem kleinen Kniff kann man dann dynamisch Inhalte aus DotNetNuke in Silverlight anzeigen...</description>
      <author />
      <comments>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=56#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=56</guid>
      <pubDate>Fri, 19 Oct 2007 12:17:40 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=56</trackback:ping>
    </item>
    <item>
      <title>Webservices für das ASP.NET AJAX Toolkit unter DotNetNuke</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=53</link>
      <description>&lt;p&gt;Aller Anfang ist schwer. Insbesondere bei der Verwendung von Webservices für das AJAX Toolkit. Nicht, weil die Doku schlecht ist, oder die Anwendung der Controls so schwierig (ganz im Gegenteil), sondern weil man einfach nicht sieht, was da passiert, wenn die SOAP-Calls abgesetzt werden. Schlimmer noch: Man kann sich ja nicht einmal sicher sein, dass sie abgesetzt werden.&lt;/p&gt;
&lt;p&gt;Was tun, wenn man nichts sieht? Augen aufmachen!&lt;br /&gt;
In diesem Fall heißt das: &lt;a target="_blank" href="http://www.fiddlertool.com/fiddler/"&gt;den Fiddler&lt;/a&gt; installieren. Dieses Tool arbeitet als Proxy zwischen dem IE und dem Web und zeichnet den Datenverkehr auf. Somit werden auch die sonst "unsichbaren" SOAP-Aufrufe sichtbar.&lt;br /&gt;
Vorsicht: Der Fiddler zeichnet &lt;a href="http://localhost/"&gt;http://localhost/&lt;/a&gt;... nicht auf. Hier muss man sich mit der aktuellen IP oder dem Computernamen behelfen!&lt;/p&gt;
&lt;p&gt;Mit Hilfe des Fiddlers lassen sich die kleinen Hürden nun schnell meistern. Unter DNN gibt es allerdings noch einen Kniff in Bezug auf den &lt;strong&gt;ServicePath&lt;/strong&gt;. Normalerweise gibt man hier im Control die URL zum behandelnden Webservice an. Unter DNN hatte ich mit den relativen Pfaden Schwierigkeiten. Der richtige Pfad wäre beispielsweise &lt;em&gt;~/DektopModules/MeinModul/MeinWebservice.asmx&lt;/em&gt;. Diese Notation wird zur Laufzeit nicht richtig umgesetzt, es sei denn, man schreibt die URL nicht direktt in das Attribut des Controls, sondern macht dies programmatisch zur Laufzeit (in Page_Load):&lt;/p&gt;
&lt;p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page); &lt;br /&gt;
ServiceReference serviceRef = new ServiceReference(); &lt;br /&gt;
serviceRef.Path = @"~/DesktopModules/MeinModul/MeinWebservice.asmx";&lt;br /&gt;
scriptManager.Services.Add(serviceRef);&lt;/p&gt;&lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=53&gt;More ...&lt;/a&gt;</description>
      <author />
      <comments>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=53#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=53</guid>
      <pubDate>Wed, 20 Jun 2007 22:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=53</trackback:ping>
    </item>
    <item>
      <title>Verwendung der DotNetNuke ClientAPI</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=52</link>
      <description>Bei der Verwendung der DotNetNuke ClientAPI stieß ich trotz ausführlicher Dokumentation von Jon Henning schnell auf offene Fragen. Insbesondere war mir anfangs unklar, in welcher Methode ich welche Registrierungen oder Initialisierungen vornehmen mussste. Im folgenden kläre ich einige davon auf...</description>
      <author />
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=52</guid>
      <pubDate>Sat, 24 Mar 2007 23:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=52</trackback:ping>
    </item>
    <item>
      <title>Ausschalten (visible=false) von DotNetNuke-Modulen</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=51</link>
      <description>Für ein Projekt stand ich plötzlich vor der Aufgabe ein Modul programmatisch unsichtbar schalten zu müssen und stellte fest: Die Visible-Eigenschaft des Modul hilft da kaum weiter, denn damit schaltet man ja nur den Inhalt des Containers ab. Aber es geht auf andere Weise...</description>
      <author />
      <comments>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=51#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=51</guid>
      <pubDate>Sun, 25 Feb 2007 23:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=51</trackback:ping>
    </item>
    <item>
      <title>Fehler beim Empfangen von Emails (error 0x800CCC0F) </title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=12</link>
      <description>&lt;P&gt;error (0x800CCC0F) : 'The connection to the server was interrupted. If this problem continues, contact your server administrator or Internet service provider (ISP). The server responded: +OK'.&lt;/P&gt;
&lt;P&gt;Dieser Fehler tritt des öfteren bei bestimmten Spam-Mails in Verbindung mit Norton Anti Virus auf. Beim Herunterladen der Mails vom Mailserver wird die Verbindung plötzlich unterbrochen, sobald eine dieser ominösen Spam-Mails gefunden wird. Besonders störend ist, dass die bis dato heruntergeladenen Mails auf dem Mailserver nicht gelöscht werden. Wenn man nicht zufällig manuell auf den Server zugreifen kann, hat man schlechte Karten. &lt;BR&gt;Bei &lt;A href="http://www.symantec.de/"&gt;Symantec &lt;/A&gt;ist das Problem zwar bekannt (siehe &lt;A href="http://service1.symantec.com/SUPPORT/INTER/navintl.nsf/55ef66fb9ca3f5b285256d8d006a65d4/d2cc0bbe205af032c1256a8c002c017a?OpenDocument&amp;prod=&amp;ver=&amp;tpre=de&amp;src=http://www.e-llusions.dede_sg&amp;csm=no"&gt;Support-Artikel&lt;/A&gt;), allerdings fand ich dort bisher nur den Tip, die Email-Prüfung auszuschalten ( Uff! Das muss man sich mal auf der Zunge vergehen lassen.). Immerhin funktioniert es tatsächlich: Schalte ich die Email-Überprüfung ab, kommen alle problemlos an. Als endgültige Lösung kann ich diesen Ansatz allerdings nicht verstehen...&lt;/P&gt;&lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=12&gt;More ...&lt;/a&gt;</description>
      <author />
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=12</guid>
      <pubDate>Sat, 17 Apr 2004 23:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=12</trackback:ping>
    </item>
    <item>
      <title>Lebenszyklus von ASP.NET-Seiten</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=11</link>
      <description>&lt;P&gt;Viele Schwierigkeiten von Einsteigern bei der Erstellung eigener (Custom-)Controls ergeben sich aus der Unkenntnis des genauen Lebenszyklus eines solchen. Meist rühren die Probleme daher, dass bei einem PostBack der Zustand des Controls (samt seiner ChildControls) nicht 1:1 wieder hergestellt wird. Die Folge davon ist, dass beispielsweise die Event-Handler nicht mehr richtig zu den Controls zugeordnet werden können. (Dabei können erstaunliche, scheinbar mysteriöse Nebeneffekte auftreten, die, wenn sie den leidgeplagten Programmierer nicht zur Verzweiflung treiben würden, wirklich lustig wären. Beispielsweise wird statt des erwarteten, registrierten Event-Handler eines Controls auch schonmal der eines vollkommen anderen aufgerufen.)&lt;/P&gt;
&lt;P&gt;Zu diesem Thema kann ich übrigens das Buch "&lt;EM&gt;ASP.NET Server Controls and Components"&lt;/EM&gt; von Nikhil Kothari und Vandana Datye (erschienen im Microsoft-Verlag) emfpehlen. Darin ist auf Seite 175 auch der Lebenszyklus eines CustomControl abgebildet. Leider fehlen mir in dieser Darstellung eine wichtige Methode: CreateChildControls(). Daher versuche ich eine angereicherte Darstellung der Abläufe:&lt;/P&gt;
&lt;P&gt;Ohne PostBack:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Instanciate: Constructor 
&lt;LI&gt;Init() und OnInit() 
&lt;LI&gt;TrackViewState() 
&lt;LI&gt;Load() / OnLoad() 
&lt;LI&gt;ggf. DataBind() und OnDataBinding() 
&lt;LI&gt;EnsureChildControls() und CreateChildControls() 
&lt;LI&gt;PreRender() und OnPreRender() 
&lt;LI&gt;SaveViewState() 
&lt;LI&gt;Render() 
&lt;LI&gt;RenderChildren() 
&lt;LI&gt;Unload() und OnUnload()&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Mit PostBack:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Instanciate: Constructor 
&lt;LI&gt;Init() und OnInit() 
&lt;LI&gt;TrackViewState() 
&lt;LI&gt;HasChildControls(), EnsureChildControls() und CreateChildControls() 
&lt;LI&gt;LoadViewSate() 
&lt;LI&gt;LoadPostData() 
&lt;LI&gt;Load() / OnLoad() 
&lt;LI&gt;RaisePostDataChangedEvent() 
&lt;LI&gt;RaisePostBackEvent()  
&lt;LI&gt;DataBind() und OnDataBinding() 
&lt;LI&gt;EnsureChildControls() und CreateChildControls() 
&lt;LI&gt;PreRender() und OnPreRender() 
&lt;LI&gt;SaveViewState() 
&lt;LI&gt;Render() 
&lt;LI&gt;RenderChildren() 
&lt;LI&gt;Unload() und OnUnload()&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Man muss sich bewusst machen, dass bei einem PostBack das Control (plus ChildControls) zunächst 1:1 wieder hergestellt wird. Dies geschieht unter Punkt 4. Anschließend wird der Zustand des Controls wiederhergestellt (Punkte 5 u. 6) und erst danach werden die registrierten Handler aufgerufen (Punkte 8 u. 9)&lt;BR&gt;Kann (durch unglückliche Programmierung) der Zustand der Controls nicht ordentlich wieder hergestellt werden, können auch die registrierten Handler nicht korrekt zugewiesen werden, und es kommt beim Aufruf der Handler zu einem unkalkulierbaren Durcheinander.&lt;BR&gt;&lt;/P&gt;&lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=11&gt;More ...&lt;/a&gt;</description>
      <author />
      <comments>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=11#Comments</comments>
      <slash:comments>0</slash:comments>
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=11</guid>
      <pubDate>Sun, 04 Apr 2004 22:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=11</trackback:ping>
    </item>
    <item>
      <title>Anbindung an den GZS Paymaster via PHP (Server-2-Server) </title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=10</link>
      <description>&lt;P&gt;Endlich ist es geschafft! Meine Direktanbindung an den &lt;A href="http://www.gzs.de/de/produkte_loesungen/gzspaymaster/index.html"&gt;Paymaster &lt;/A&gt;der Firma GZS funktioniert endlich. &lt;/P&gt;
&lt;P&gt;Ich kann Euch gar nicht sagen, wieviele Nerven mich das gekostet hat. (An dieser Stelle noch einmal vielen Dank an die freundliche Dame vom GZS-Support-Team, die meinen ständigen Anfragen mit einer Engelsgeduld entgegentrat.)&lt;/P&gt;
&lt;P&gt;Die Klasse, in der ich alle Funktionen zur direkten  Kommunikation mit dem Paymaster gekapselt habe, steht eigentlich schon eine ganze Weile. Patrick hatte mir für erste Tests einen kleinen Server geschrieben, mit dem man den Paymaster simulieren konnte. Wir haben damit zunächst "Trockenübungnen" gemacht, weil unser Testaccount noch nicht fertig war.&lt;/P&gt;
&lt;P&gt;Als es dann zur Sache ging, traten schnell die ersten Probleme auf. Der Verbindungsaufbau klappte, aber der Paymaster meldete uns statt eines fröhlichen "HTTP/1.1 200 OK" dauernd ein frustrierendes "HTTP/1.1 100 Continue". Mistfink! Sobald wir ein Byte zu wenig oder zuviel sendeten (Content-Length), leifen wir in einen Timeout. Also musste ein anderes Problem vorliegen.&lt;BR&gt;Der entscheidende Tip kam dann vom Support-Team: Anstelle von "HTTP 1.1" wie es im Handbuch beschrieben ist, wird "HTTP 1.0" in der Anfrage verlangt. Ein kleiner, aber feiner Unterschied. (Anm.: Die Antwort des Servers beruht jedoch immer auf "HTTP 1.1"!)&lt;/P&gt;
&lt;P&gt;Nach dieser Erkenntnis lieferte der Paymaster auch die gewünschte Antwort. Bei der Bestätigungsanfrage krachte es allerdings abermals. Auf eine korrekte Anfrage antwortete der Server ohne Angabe der Content-Length, allerdings auch ohne "Connection: Close". Bekommt man ein "Connection: Close", weiß man, dass man den Stream leerlesen soll, und dann die Verbindung gekappt wird. Lautes Fluchen konnte ich mir nicht verkneifen, aber Patrick bemerkte nur, dass sich ja eh keiner an die Standards halten würde, und ich mich nicht so aufregen solle.&lt;BR&gt;Wie auch immer. Im Beispiel im Handbuch steht eine Content-Length-Angabe in der Antwort. Davon sollte man sich allerdings nicht täuschen lassen: Sie kommt nicht. Als Workaround habe ich mich damit angefreundet bei nicht gesetzter Content-Length den Stream leerzulesen. Das ist nicht ganz sauber, aber es funktioniert.&lt;/P&gt;
&lt;P&gt;Ein weiteres kleines "Bonbon" ist, dass bei der Serverantwort auf die Bestätigungsanfrage als erstes Zeichen ein kleines "k" gesendet wird. Da der Client zunächst auf "HTTP/1.1 200 OK" prüft, führt dies zu einem neuen Problem. Hier sollte man den regulären Ausdruck etwas aufweichen: /^k?HTTP/[0-9]+\..[0-9]+\s+(200\sOK)/i&lt;/P&gt;
&lt;P&gt;Ich hoffe, ich konnte mit diesem Artikel helfen, Frust zu vermeiden (und vielleicht sogar den GZS-Support etwas zu entlasten). Auf Anfrage stelle ich ggf. auch gerne meine Paymaster-Klasse zur Verfügung.&lt;/P&gt;
&lt;P&gt;Abschließend würde ich gerne noch eine Frage stellen, die mir während der Entwicklung tausendfach in den Kopf kam: Warum zum Henker bietet die GZS keinen Webservice für die Zahlungsabwicklung an? Aus technischer Sicht sicherlich ein Klacks, zumal im Backend das .NET-Framework zu Verfügung steht. Für die Entwickler der Clients wäre das insofern angenehmer, weil man sich dann auf die wesentlichen Dinge konzentrieren könnte und sich nicht mit den Details der Verbindung auseinandersetzen müsste. Außerdem könnte der Webservice mit aussagekräftigen Fehlermeldungen auf fehlerhafte Anfragen reagieren.&lt;/P&gt;&lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=10&gt;More ...&lt;/a&gt;</description>
      <author />
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=10</guid>
      <pubDate>Tue, 10 Feb 2004 00:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=10</trackback:ping>
    </item>
    <item>
      <title>Globalization von ASP.NET-Anwendungen </title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=9</link>
      <description>&lt;P&gt;Es gibt in der web.config die Möglichkeit, die Applikation auf ein Sprachgebiet einzustellen. Das ist besonders dann wichtig, wenn man Umlaute in Requests verwenden möchte - mit UTF-8 (Standard-Eintellung) kommt man sonst natürlich nicht weit.&lt;/P&gt;
&lt;P&gt;Alles was dafür zu tun ist, ist den Knoten &lt;GLOBALIZATION&gt;innerhalb der von &lt;system.web&gt; &lt;SYSTEM.WEB&gt;zu definieren. Das könnte z.B. so aussehen:&lt;/SYSTEM.WEB&gt;&lt;/GLOBALIZATION&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;&lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;globalization &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;fileEncoding&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="iso-8859-1" &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;requestEncoding&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="iso-8859-1" &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;responseEncoding&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="iso-8859-1"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Damit erreicht man z.B., dass Umlaute in Parametern richtig zurückgegeben werden. Ein Aufruf von, sagen wir,&lt;BR&gt;&lt;FONT size=2&gt;string meinParameterWert= Context.Request.QueryString["meinParameter"];&lt;BR&gt;&lt;/FONT&gt;liefert daraufhin auch äs, ös, üs und Konsorten. &lt;/P&gt;
&lt;P&gt;Kleiner Trick, große Wirkung...:)&lt;/P&gt;&lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=9&gt;More ...&lt;/a&gt;</description>
      <author />
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=9</guid>
      <pubDate>Thu, 15 Jan 2004 00:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=9</trackback:ping>
    </item>
    <item>
      <title>SOAP via PHP</title>
      <link>http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=7</link>
      <description>&lt;P&gt;WebServices auf Basis von XmlRpc zu implementieren ist easy und in vielen Fällen absolut ausreichend. Doch wie sieht's mit SOAP aus? In PHP? Eine Low-Level-Unterstützung (wie bei XmlRpc) gibt es für SOAP leider nicht. Auf &lt;A href="http://www.soapware.org/directory/4/implementations"&gt;soapware.org&lt;/A&gt; fand ich verschiedene Ansätze für PHP. PEAR bietet sicherlich eine gute Implementierung, aber man benötigt dann natürlich x andere PEAR-Klassen. Das erschien mir irgendwie zu wulstig.&lt;BR&gt;Schnell landetet ich bei &lt;A href="http://dietrich.ganx4.com/soapx4/"&gt;nuSphere&lt;/A&gt; von Dietrich Ayala. (Ich erinnere mich dunkel, dass ich vor zwei Jahren mit einem ersten Ansatz dieses Autors herumgespielt und erste WebService-Erfolge erzielt hatte. Das hat meine Entscheidung sicherlich beeinflußt...)&lt;BR&gt;Nach wenigen Minuten hatte ich einen kleinen Test-Service eingerichtet; kurze Zeit später einen Test-Client - easy!&lt;/P&gt;
&lt;P&gt;Jetzt wollte ich natürlich wissen, ob man auch mit einem fremden Client auf den Server zugreifen kann. Doch schon der Versuch eine Web-Referenz einzurichten schlug kläglich fehl. Der WebService konnte sich nicht selbst beschreiben (Stichwort WSDL) und blieb unerreichbar.&lt;BR&gt;Der Konstruktor des Servers akzeptiert den Parameter $wsdl, womit man wahrscheinlich eine Datei mit den notwendigen Informationen angeben kann, allerdings hatte ich damit kein Glück. Durch ein &lt;A href="http://dietrich.ganx4.com/nusoap/testbed/round2_base_server.phps"&gt;Beispiel&lt;/A&gt; von D.Ayala kam ich auf den Trichter:&lt;BR&gt;&lt;CODE&gt;$server-&gt;configureWSDL('InteropTest','http://soapinterop.org/');&lt;BR&gt;$server-&gt;wsdl-&gt;schemaTargetNamespace = 'http://soapinterop.org/xsd/';&lt;BR&gt;$server-&gt;wsdl-&gt;addComplexType('ArrayOfstring','complexType','array','','SOAP-&gt;ENC:Array',array(),array(array('ref'=&gt;'SOAP-&gt;ENC:arrayType','wsdl:arrayType'=&gt;'string[]')),'xsd:string');&lt;BR&gt;&lt;/CODE&gt;&lt;/P&gt;Man kann also die notwendige Beschreibung des WebService mit einer speziellen Klasse des Frameworks definieren. Auch im Visual Studio ließ sich anschließend (fast) problemlos die Web-Referenz einrichten und verwenden. &lt;br /&gt;&lt;a href=http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=7&gt;More ...&lt;/a&gt;</description>
      <author />
      <guid isPermaLink="true">http://www.e-llusions.de/Default.aspx?tabid=67&amp;EntryID=7</guid>
      <pubDate>Fri, 09 Jan 2004 00:00:00 GMT</pubDate>
      <trackback:ping>http://www.e-llusions.deDesktopModules/BlogTrackback.aspx?id=7</trackback:ping>
    </item>
  </channel>
</rss>
