Silverlight Datenbank zugriff per Webservice


#1
Hey ich will ein DataGrid in Silverlight mit Daten aus einer Datenbank füllen.

Die daten will ich mir per Code holen und nicht per DataSource.
Ich habe jetzt schon ne lange Zeit gegoogelt, dabei habe ich folgende Ergebnisse festgestellt:
Silverlight selber kann nicht die Daten aus der Datenbank holen. Man braucht einen WebService. Ich benutze Visual Studio 2010 und Silverlight 4.
Meine Frage ist nun wie richte ich mir einen WebService ein so das ich aus der Silverlight Anwendung drauf zugreifen komme. Bzw auf die Daten zugreifen kann

Nun habe ich einen Service angelgt der folgende Funktion enthält:
Code:
public ICollection CreateDataSource(){
//hier werden die daten geholt
}
Aber wie binde ich den Service ein?
Wenn ich ihn in Visual Studio 2010 einbinden will, sagt der mir das ein Fehler aufgetreten ist.

Muss ich ein Assembly hinzufügen? Oder sonst noch was hinzufügen?

Das kann ja nicht so kompliziert sein wenn es dazu so wenig gibt?!
MFG

Mirc
 
Zuletzt bearbeitet:
#2
Ich habe es geschafft den Service einzubinden, der Fehler war anscheinend das der mit der Einbindung nicht zufrieden war, wenn man den Service und die aspx datei im Selben Projekt hat. Nun habe ich den Service in einem extra Project.
Allerdings kommt nun der nächste Fehler.
Da ich eigentlich nur 3 Werte benötige will ich mir ein Array holen.
Wie rufe ich die Service Methoden in der Silverlight Application auf?
Nehmen wir als beispiel die Standart Methode getData in dem Service:

Code:
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }
Die ist auch schon im Interface registriert, also muss man da weiter nichts machen.
Nun will ich den String mir in der Silverlight Code Behind datei holen.

Dort gibt es nur:
Code:
ServiceReference1.GetDataCompletedEventArgs
Und ich weiß nun nicht wie ich an die Methode komme die ich eigentlich aufrufen will. Also gedacht hätte ich folgendes:
Code:
String s=ServiceReference1.GetData(value);
Hat einer Damit schon mal gearbeitet?

Ich denke an den Simplen Beispiel sollte es am besten zu erklären sein
 
#3
Hey ich bin wieder ein stück weitergekommen.
Code:
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
client.GetDataCompleted += new EventHandler<ServiceReference1.GetDataCompletedEventArgs>(client_getDataComplete);
client.GetDataAsync(1);
Man muss einen EventHandler hinzufügen und über einen Asynchronen aufruf die Methode aufrufen.
Der EventHandler:
Code:
void client_getDataComplete(object sender, ServiceReference1.GetDataCompletedEventArgs e)
        {
            String temp = e.Result;
        }
Das sollte nun das gewünschte ergebniss liefern. Tut es leider nicht. Bei e.Result scheint er nicht weiterzumachen.
Hat jetzt jemand vllt eine Idee?

Ich habe mir mal e.Error ausgeben lassen.

Code:
System.ServiceModel.CommunicationException: An error occurred while trying to make a request to URI 'http://localhost:1511/Service1.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error.
   at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
   at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
   --- End of inner exception stack trace ---
   at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
   at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
   at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
Das liefert mir e.Error wenn das jemanden weiterhilft. Ich such selber weiter

MFG
 
Zuletzt bearbeitet:
#4
So die Letzte sache für heute hoffe ich...
Kann es sein das ich nicht auf den WebService zugreifen kann?
Auf den entwicklungsrechner ist leider kein IIS installiert könnte die damit zusammenhängen?