2009-04-14 5 views
0

Ich habe ein Silverlight-Projekt, das in einen WCF-Dienst ruft. Alles funktioniert gut auf meinem lokalen Rechner.Silverlight WCF-Dienst wirkt seltsam

Wenn ich jedoch auf einer virtuellen Maschine mit der genau gleichen Abfrage bereitstellen, wird der WCF-Dienst zurückgegeben, aber das Ergebnis ist leer.

Ich habe versucht, zu debuggen, aber es war nicht in der Lage, es in den WCF-Service zu brechen.

Irgendwelche Ideen, was das Problem sein könnte, oder wie könnte ich über Debugging gehen?

Dank


habe ich herausgefunden, was das Problem ist, aber ich bin nicht sicher, was die Lösung ist.

In meinem Silverlight-Projekt den WCF-Dienst Ich Referenzierung bin, ist http://localhost/.../SilverlightApiService.svc

Ich benutzte Fiedler auf meiner vm die Anfrage, um zu sehen, die gemacht wurde und anstatt zu versuchen, die oben genannten Service zu kontaktieren, es wurde versucht, kontaktieren:

http:///.../SilverlightApiService.svc

also aus irgendeinem Grund meine Maschine Name wird immer dort statt localhost eingefügt. Irgendwelche Gedanken dazu würden geschätzt.

+0

Haben Sie Fiddler versucht? –

Antwort

0

Können Sie uns ein bisschen mehr Informationen geben? Welche Art von Bindung verwendest du? Wie sieht die Service-Konfiguration und die Client-Konfiguration aus? Woher bekommen Sie Ihre Daten zurück? Könnte es sein, dass der Dienst auf der VM keine Daten erhält? (Fragt zum Beispiel eine Datenbank, die hat einfach nicht die Daten angefordert?)

Marc

+0

Es verwendet basicHttpBinding. Die Client-Service-Referenz wurde mithilfe von add reference hinzugefügt. Ich weiß, dass die Daten dort sind, weil ich eine Konsolenanwendung erstellt habe, wenn sie auf den Dienst verwiesen hat und Ergebnisse mit der Abfrage zurückgegeben hat, die keine Ergebnisse zurückgibt, wenn sie von silverlight aufgerufen wird. –

0

Ich habe das schon mal vorkommen musste. Ich würde das versuchen. Legen Sie Ihre Startseite als Web-Service-Datei fest und führen Sie die App aus. Stellen Sie dann die Startseite auf Ihre Standardseite zurück. Aktualisieren Sie anschließend alle Serverreferenzen in Ihrem SL-Projekt. Alles neu kompilieren und erneut veröffentlichen. Das hat mir in der Vergangenheit schon einige Male geholfen.

0

Ich habe herausgefunden, was das Problem ist, aber ich bin mir nicht sicher, was die Lösung ist.

In meinem Silverlight-Projekt den WCF-Dienst Ich Referenzierung bin, ist http://localhost/.../SilverlightService.svc

Ich benutzte Fiedler auf meiner vm die Anfrage, um zu sehen, die gemacht wurde und anstatt zu versuchen, die oben genannten Service zu kontaktieren, es wurde versucht, kontaktieren:

http: ///.../SilverlightService.svc

So ist meine Maschine aus irgendeinem Grund Name dort statt localhost immer eingefügt. Irgendwelche Gedanken dazu würden geschätzt.

1

Ich hatte dieses genaue Problem bei der Bereitstellung in Amazon ec2 - Der Maschinenname für den Dienst wurde in der WSDL und nicht in der DNS zurückgegeben.

Es gab ein paar Lösungen (eine mit der Erstellung von statischen WSDL - yuck!)

Aber der andere war eine Art Fabrik Muster für den Dienst

Dieser Thread zu schaffen (Sie können es alle, aber die Antworten sind am unteren Rand lesen.) http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c7fd51a2-773e-41d4-95a0-244e925597fe/

Der leichte Untergang mit Das ist, obwohl es funktioniert - wenn Sie den Standort des Servers ändern, müssen Sie daran denken, Ihre Konfiguration zu aktualisieren - was ist zwar nicht schwer, es ist leicht zu vergessen, zu tun.

0

Ich fand es heraus.

Grundlegend wurde mein Computername in meiner ServiceReferences.ClientConfig-Datei in meinem Silverlight-Projekt fest codiert.

Was ich tun musste, war programmatisch welche URL zu verwenden, für den Dienst Referenz angeben, wenn meine Service-Client instanziieren:

System.ServiceModel.EndpointAddress address = new System.ServiceModel.EndpointAddress(new Uri 
     (Application.Current.Host.Source, "../WebServices/SilverlightService.svc")); 

     ServiceClient serviceClient = new ServiceClient("BasicHttpBinding_IService", address);