Niedawno pisałem o problemie związanym z komunikacją pomiędzy aplikacją Silverlight, a WCF Service umieszczonym w aplikacji ASP.NET (link). Ponieważ nie dawało mi to spokoju oraz problem ten występował także w aplikacji konkursowej (patrz Win The Web), to postanowiłem znaleźć jego przyczynę.
Okazało się, że przyczyną całego zamieszania, było to, że serwis WCF jest hostowany razem z aplikacją ASP.NET w tej samej domenie. W efekcie, z jakiś powodów, w pewnym momencie WCF Service przestaje działać i nawet restart IISa nie pomaga.
Lokalnie (tak jak pisałem poprzednio) można czyścić katalog C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\, natomiast na serwerze IIS najszybciej jest wgrać ponownie katalog bin z nowo przekompilowanej wersji projektu.
Ale, że lepiej zapobiegać niż leczyć, to należy:
- W pliku konfiguracyjnym ASP.NET (web.config), w elemencie <System.serviceModel>, dodać wpis <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>.
- W WCF Service, a dokładniej w kodzie usługi dodajemy
using System.ServiceModel.Activation;
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class KlasaService : IKlasaService
{ .. }
Zmiany te spowodują, że WCF Service będzie zachowywać się jak zwykły ASMX, czyli straci swoje specjalne właściwości, ale za to będzie współdziałał bezawaryjnie z aplikacją ASP.NET. Na temat powyższych ustawień (Allowed/Required) nie będę się rozpisywał w tym poście i zapraszam po więcej na stronę MSDNa (link).
Resources
- Webcast Tim Heuer-a na temat połączeń Silverlighta z WCFem (link) – POLECAM!!! (szkoda, że nie ukazał się z tydzień wcześniej, zaoszczędziło by mi to bardzo dużo czasu ;) )
- Wpis Kemal Tolga Koseoglu (link) - Polecam!
- Dokładny opis całego problemu (link) - Polecam!
- Obszerny artykuł na w/w temat tylko w połączeniu z ASMXem (link)
- Dyskusja na forum Silverlight.net na w/w temat(link)
Pozdrawiam,
Jacek Ciereszko

Brak komentarzy:
Prześlij komentarz