Benutzer mit den meisten Antworten
Hilfeeeee ..Probleme mit Silverlight 3 & ASMX WebService & DNN5.22 ....Bitte lesen ;-)

Frage
-
Moin Moin..
Seit mehreren Wochen plagt mich ein essentielles Problem.. Zur Sachlage: Ich habe mittels Sivlerlight 3 und C# eine News-Verwaltung für meine Zeitung geschrieben..Die Sql Datenbankaktionen habe ich mit einem ASMX Webdienst aufgeführt..Funktionierte auch prima..Allerdings immer nur lokal..Dann habe ich das ganze Projekt unter C:/Inetpub/wwwroot/Dnn522/DesktopModules/CCNVerwaltung abgelegt und über meinen lokalen IIS abgerufen und ausgeführt..Es geht nicht mehr..Erst Recht nicht, wenn ich aus dem Projekt ein DNN Modul mache,...Die Kommunikation scheint gestört zu sein..Es kommt regelmässig die Fehlermeldung, dass der Remoteserver nicht zu erreichen ist...Ich habe schon alles probiert und gegoggelt..Aber ich verhackel mich immer mehr..Jetzt verstehe ich nichts mehr :-( Mein Webserice heißt WS.asmx, eingebunden über Service Referenz habe ich ihn als ServiceReference1. Das ganze Projekt läuft inzwischen nicht mehr auf Port 2000 über den Development Server. Wenn ich Ws.asmx über den physikalischen Pfad "http:Localhost/dnn522/desktopmodules/ws/benutzeroberfläche.web/ws.asmx aufrufe funktioniert er auch, aber in der servicereference.clientconfig steht folgendes drin :
<configuration> <system.serviceModel> <bindings> <basicHttpBinding> <bindingname="WSSoap"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"> <securitymode="None"/> </binding> <bindingname="WSSoap1"maxBufferSize="2147483647"maxReceivedMessageSize="2147483647"> <securitymode="None"/> </binding> </basicHttpBinding> </bindings> <client> <endpointaddress="http://localhost:1768/WS.asmx"binding="basicHttpBinding"bindingConfiguration="WSSoap"contract="ServiceReference1.WSSoap"name="WSSoap"/> <endpointaddress="http://localhost:1768/WS.asmx"binding="basicHttpBinding"bindingConfiguration="WSSoap1"contract="ServiceReference2.WSSoap"name="WSSoap1"/> </client> </system.serviceModel> </configuration>
Irgendwie passt das doch alles gar nicht zusammen, oder??
Also meine Frage : Wie bindet man einen WebService "richtig" in Silverlight 3 ein, so dass er auch von einem DNN Modul von aussen aufrufbar ist ??
Liebe Grüße Dominik- Bearbeitet Robert Breitenhofer Mittwoch, 3. März 2010 08:46 Formatierung
- Bearbeitet Dominik Siefert Donnerstag, 18. März 2010 14:22
Mittwoch, 3. März 2010 08:36
Antworten
-
Hi Dominik,
ich weiß zwar nicht, was bei dir ein DNN ist, bei mir funktioniert Silverlight mit WebService unter IIS problemlos.
Mache mal folgendes:
1. WebService erstellen und auf Server hochladen.
2. WebService auf dem veröffentlichten Platz prüfen, z.B. WSDL abrufen.
3. Silverlight-Anwendung mit Referenz auf veröffentlichten WebService kompilieren und testen.
4. Silverlight-Anwendung hochladen und Aufruf in Web-Seite testn.
Bei welchem Schritt gibt es die ersten Probleme?
--
Peter
- Als Antwort markiert Robert Breitenhofer Freitag, 26. März 2010 09:12
Freitag, 19. März 2010 18:14 -
Ja :-)
Und peinlich peinlich..Es war einfach nur ein falscher Pfad :-(
Mehr nicht.. Wenigstens konnte ich mir bei der Gelegenheit alles über WebServices durchlesen was man so bei google findet ;-)
Thx an alle..
- Als Antwort markiert Robert Breitenhofer Freitag, 26. März 2010 09:12
Freitag, 26. März 2010 08:51
Alle Antworten
-
Hallo Dominik,
Schau Dir mal die folgenden Links an. Vielleicht können Sie Dir weiter helfen.
DotNetNuke Silverlight 3.0 Hello World à http://www.codeproject.com/KB/aspnet/DNNSilverlight3HelloWorld.aspx
Grüße,
Robert
- Als Antwort vorgeschlagen Robert Breitenhofer Montag, 8. März 2010 15:56
- Als Antwort markiert Robert Breitenhofer Mittwoch, 10. März 2010 14:57
- Tag als Antwort aufgehoben Robert Breitenhofer Donnerstag, 18. März 2010 17:13
- Nicht als Antwort vorgeschlagen Robert Breitenhofer Donnerstag, 18. März 2010 17:14
Donnerstag, 4. März 2010 11:11 -
Hi :-)
Nee, leider nicht :-(
Ich habe alles nochmal neu gemacht, und immer noch dieselben Probleme..
Ich habe lokal auf C:\Wangerland-News.de\Verwaltung\ eine Silverlight App nebst ASP Webanwendung erstellt.
Die Asp Webanwendung beinhaltet einen Webservice namens WS.asmx. Diesen binde ich über Add/ServiceReference zu der
Silvelright App hinzu..Soweit so gut.. Der Pfad der mir angebeoten wird beim adden sieht so aus :
http://localhost:1980/WS.asmx
Ist ja wahrscheinlich auch okay, da es zu diesem Zeitpunkt lokal ausgeführt wird und nicht unter DNN 5.2.2 ...
Ich adde den Webservice also unter dem Namen WS...
Beim kompilieren usw habe ich keine Probleme..
Bei der Silverlight App wird eine Datei namens ServiceReferences.ClientConfig hinzugefügt..Die sieht folgendermassen aus:
<configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="WSSoap" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:1980/WS.asmx" binding="basicHttpBinding"bindingConfiguration="WSSoap" contract="WS.WSSoap" name="WSSoap" /> </client> </system.serviceModel> </configuration>
Eine Web.Config benutze ich in der Web-Anwendung nicht, da dieses immer zu Problemen mit DNN führt - wegen doppelter Web.Config..;-)
Wenn ich den Webservice manuell im Browser aufrufe fangen die Probleme schon an:
Bei der MEthode Select kommt folgende Meldung im Browser ( DS ist mein DataSet und stellt eine Verbindung zu einer SQL Tabelle - die der DNN522 Datenbank hinzugefügt wurde - her )
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei Verwaltung.Web.DSTableAdapters.WangerlandNewsTableAdapter.InitConnection() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\DS.Designer.cs:Zeile 954.
bei Verwaltung.Web.DSTableAdapters.WangerlandNewsTableAdapter.get_Connection() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\DS.Designer.cs:Zeile 827.
bei Verwaltung.Web.DSTableAdapters.WangerlandNewsTableAdapter.InitAdapter() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\DS.Designer.cs:Zeile 915.
bei Verwaltung.Web.DSTableAdapters.WangerlandNewsTableAdapter.get_Adapter() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\DS.Designer.cs:Zeile 816.
bei Verwaltung.Web.DSTableAdapters.WangerlandNewsTableAdapter.GetDataByAll() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\DS.Designer.cs:Zeile 1049.
bei Verwaltung.Web.WS.selectNews() in C:\Wangerland-News.de\Verwaltung\Verwaltung.Web\WS.asmx.cs:Zeile 67.
Zum besseren Verständnis mein WebService WS.asmx :
using System; using System.Collections.Generic; using System.Linq; using System.Web.Services; using Verwaltung.Web.DSTableAdapters; using Verwaltung; using System.Windows.Data; namespace Verwaltung.Web { [WebService(Namespace = "http://webservices.DotNetNuke.com/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class WS : System.Web.Services.WebService { [WebMethod] public string insertnews(Daten daten) { WangerlandNewsTableAdapter adapter = new WangerlandNewsTableAdapter(); try { adapter.Insert(daten.ModuleID,daten.NewsID, daten.Bild, daten.Headline, daten.Anreisser, daten.Inhalt, daten.Adresse, daten.Start); } catch (Exception e) { return e.Message; } return null; } [WebMethod] public string updateNews(Daten daten) { WangerlandNewsTableAdapter adapter = new WangerlandNewsTableAdapter(); try { adapter.Update(daten.ModuleID, daten.Bild, daten.Headline, daten.Anreisser, daten.Inhalt, daten.Adresse, daten.Start, daten.NewsID); } catch (Exception e) { return e.Message; } return null; } [WebMethod] public string deleteNews(Daten daten) { WangerlandNewsTableAdapter adapter = new WangerlandNewsTableAdapter(); try { adapter.Delete(daten.NewsID); } catch (Exception e) { return e.Message; } return null; } [WebMethod] public List<Daten> selectNews() { WangerlandNewsTableAdapter adapter = new WangerlandNewsTableAdapter(); DS.WangerlandNewsDataTable news = adapter.GetDataByAll(); List<Daten> liste = new List<Daten>(); foreach (Verwaltung.Web.DS.WangerlandNewsRow row in news) { Daten d = new Daten(); d.ModuleID = row.ModuleID; d.NewsID = row.NewsID; d.Bild = row.Bild; d.Headline = row.Headline; d.Anreisser = row.Anreisser; d.Inhalt = row.Inhalt; d.Adresse = row.Adresse; d.Start = row.Start; liste.Add(d); } return liste; } } }
Um eine Verbindung zwischen Silverlight und DNN herzustellen, habe ich der Web-Anwendung ein WebControl namens View hintzugefügt, dort rufe ich das Silverlight.xap Package auf und übergebe die initparams...
Beispiel auf der Code-Seite von View:
public string SilverlightApplication { get; set; } public string SilverlightInitParams { get; set; } protected void Page_Load(object sender, EventArgs e) { // Register Silverlight.js file Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "SilverlightJS", (this.TemplateSourceDirectory + "/Silverlight.js")); // Set the Web Service URL string strWebServiceURL = String.Format(@"http://{0}{1}/{2}", this.Context.Request.Url.Authority, this.Context.Request.ApplicationPath, "DesktopModules/Verwaltung/WS.asmx"); // Set the path to the .xap file SilverlightApplication = String.Format("{0}{1}", TemplateSourceDirectory, "/ClientBin/Verwaltung.xap"); // Pass the Initialization Parameters to the Silverlight Control SilverlightInitParams = string.Format("WebServiceURL={0}", strWebServiceURL);
In der MainPage in Silverlight will ich diese Parameter dann benutzen und zwar so:
WS.WSSoapClient daba = new WS.WSSoapClient(); private string WebServiceURL; public MainPage(string parmWebServiceURL) { this.modulid = 0; this.serverpfad = ""; InitializeComponent(); // Set the web service URL global values WebServiceURL = parmWebServiceURL; CallWebService(); this.dataForm.Focus(); } #region CallWebService private void CallWebService() { WSSoapClient objWebServiceSoapClient = new WSSoapClient(); EndpointAddress MyEndpointAddress = new EndpointAddress(WebServiceURL); objWebServiceSoapClient.Endpoint.Address = MyEndpointAddress; daba.selectNewsCompleted += new EventHandler<WS.selectNewsCompletedEventArgs>(daba_selectNewsCompleted); daba.insertnewsCompleted += new EventHandler<WS.insertnewsCompletedEventArgs>(daba_insertNewsCompleted); daba.updateNewsCompleted += new EventHandler<WS.updateNewsCompletedEventArgs>(daba_updateNewsCompleted); daba.deleteNewsCompleted += new EventHandler<WS.deleteNewsCompletedEventArgs>(daba_deleteNewsCompleted); daba.selectNewsAsync(); }
Ach ja meine clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="*"> <domain uri="*"/> </allow-from> <grant-to> <resource include-subpaths="true" path="/" /> </grant-to> </policy> </cross-domain-access> </access-policy>
und meine crossdomain.xml
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>
Wenn ich dieses ganze Konstrukt dann als DNN 5.2.2 Modul auf meinem localen DNN lade, stürzt mein Prog regelmässig in der Reference.cs von der ServiceReference bei :
public System.IAsyncResult BeginselectNews(System.AsyncCallback callback, object asyncState) { object[] _args = new object[0]; System.IAsyncResult _result = base.BeginInvoke("selectNews", _args, callback, asyncState); return _result; } public Daten[] EndselectNews(System.IAsyncResult result) { object[] _args = new object[0]; Daten[] _result = ((Daten[])(base.EndInvoke("selectNews", _args, result))); return _result; }
dem result ab .. is null...
soo, ich weiß ich schreibe hier bestimmt viel zu viel, aber ich versuche es seit zwei geschlagenen Monaten mit google.de..aber es funzt einfach nicht..bitte helft mir Oo :-)
Greetz Dominik- Bearbeitet Robert Breitenhofer Donnerstag, 18. März 2010 17:19 Formatierung
Donnerstag, 18. März 2010 14:19 -
Hi Dominik,
ich weiß zwar nicht, was bei dir ein DNN ist, bei mir funktioniert Silverlight mit WebService unter IIS problemlos.
Mache mal folgendes:
1. WebService erstellen und auf Server hochladen.
2. WebService auf dem veröffentlichten Platz prüfen, z.B. WSDL abrufen.
3. Silverlight-Anwendung mit Referenz auf veröffentlichten WebService kompilieren und testen.
4. Silverlight-Anwendung hochladen und Aufruf in Web-Seite testn.
Bei welchem Schritt gibt es die ersten Probleme?
--
Peter
- Als Antwort markiert Robert Breitenhofer Freitag, 26. März 2010 09:12
Freitag, 19. März 2010 18:14 -
Ja :-)
Und peinlich peinlich..Es war einfach nur ein falscher Pfad :-(
Mehr nicht.. Wenigstens konnte ich mir bei der Gelegenheit alles über WebServices durchlesen was man so bei google findet ;-)
Thx an alle..
- Als Antwort markiert Robert Breitenhofer Freitag, 26. März 2010 09:12
Freitag, 26. März 2010 08:51