2010-12-10 4 views
0

Ich habe eine Silverlight-App, die WCF sowohl durch Abrufen von Duplex als auch von "normalen" Async-Anrufen verwendet. Alles hat gut funktioniert, bis ich eine global.asax-Datei hinzugefügt habe.Wie kann eine neu hinzugefügte global.asax-Datei eine Verwechslung mit meinem WCF-Dienst verursachen

Nach einer Stunde Googeln stieß ich auf diesen ziemlich veralteten Blog von Jean-Dirk Stuart, der vorschlug, das stubbed Session_start-Ereignis zu kommentieren.

Sicher genug, dass das Problem behoben, aber es gibt Anlass zur Sorge. Warum würde dieses wohlwollende Mitglied der Datei global.asax die Aufrufe von wcf brechen?

Antwort

2

Ja, das ist ein wenig bekannt, aber nerviges Problem. Das Problem besteht darin, dass der Sitzungsstatus aktiviert wird, sobald Sie Ihrem Webprojekt eine Datei "global.asax" hinzugefügt haben. Sobald der Sitzungsstatus aktiviert ist, führt der Server die Anrufe nur sequenziell durch. Hier sind zwei Artikel mit etwas mehr in die Tiefe gehende Informationen:

http://blogs.msdn.com/b/silverlightws/archive/2009/09/30/having-a-pollingduplex-service-and-any-other-wcf-service-in-the-same-website-causes-silverlight-calls-to-be-slow.aspx

http://weblogs.asp.net/olakarlsson/archive/2010/05/20/simultaneously-calling-multiple-methods-on-a-wcf-service-from-silverlight.aspx

Dieses Verhalten tritt nur, wenn Sie den Browser Netzwerk-Stack verwenden, so dass Ihre Optionen sind:

  1. Disable-Sitzung Status in Ihrem Webprojekt oder
  2. Verwenden Sie den Client-Netzwerkstapel

Hope this helps ...

Chris

+0

Sehr interessant. Ich brauche keinen Sitzungsstatus, aber ich muss einen Hintergrund-Thread aufspulen, um eine Ereigniswarteschlange zu überwachen und Nachrichten über Duplex an die SL-Clients zu senden. Ich hatte erwartet, das Global.asax application_start-Ereignis zu verwenden, um dies zu erledigen. Vielleicht gibt es einen besseren Weg? –

0

Es gibt einige Bindungstypen, die den Zugriff auf asp.net-Sitzungsdaten unterstützen. Ich sehe wirklich nicht, wie sich dies auswirken würde, wenn WCF nicht wie ein http-Modul in das session_start-Ereignis eingreift. Sie können auch reflector verwenden, um den Code zu disassemblieren, von dem Sie die Ausnahme erhalten haben.

+0

das ist der Punkt, ich denke ..., wenn Sie global.asax und/oder stellen Sie Ihre WCF-Dienst asp.net Kompatibilitätsmodus hinzufügen, wcf ruft Trigger session_start (etc) – Kir