WCF Data Services vs Web Deployment Projects

Ha egy olyan Web Site projektet szeretnénk Web Deployment Projects segítségével összecsomagolni, amely egy WCF Data Services (OData) végpontot is tartalmaz, akkor sajnos az .svc fájl feldolgozása közben az alábbi hibába futhatunk bele:

Exception type: System.ServiceModel.ServiceActivationException    

Exception message: The service ‘/MyService.svc’ cannot be activated due to an exception during compilation. 

The exception message is: Could not load file or assembly ‘App_global.asax, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.

Inner exception type: System.IO.FileNotFoundException    

Elég idegesítő, de elég szép megoldást alkothatunk rá: szabaduljunk meg az egész .svc fájltól és használjunk helyette ASP.NET routingot!

Irány a global.asax, ahol regisztrálhatunk egy új route szabályt:

RouteTable.Routes.Add( "MyService",
  new ServiceRoute( "MyService", 
                    new DataServiceHostFactory(), 
                    typeof( MyService ) ) );

A WCF Data Service szolgáltatásunkat pedig a MyService osztályban implementáljuk:

public class MyService : DataService<MyDataModel>
{
  public static void InitializeService( DataServiceConfiguration config )
  {
    // Ide jön az inicializáló kód, jogosultságok, lapozás beállítása stb...
  }

  protected override void OnStartProcessingRequest( ProcessRequestArgs args )
  {
    base.OnStartProcessingRequest( args );

    // Cache és egyéb fejlécek beállítása...
  }
}

Az eredmény: működik a Web Deployment Projects és az URL-jeink is gyönyörűek.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s