Per chi volesse seguire il bel tutorial Host ASP.NET Web API in an Azure Worker Role di Mike Wasson, ci sono alcune cose da fare ora che non è più in preview ed è uscita la versione RTM in occasione del rilascio pubblico di Visual Studio 2013.
Come prima cosa, il comando da Package Manager Console non contiene più l'opzione –pre (proprio perché non è più una preview):
PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost
E fin qui, tutto facile.
Il problema si pone cercando di avviare la solution, che va in errore.
Il che deriva dal pacchetto NuGet che erroneamente applica una versione di System.Web.Http.Owin(Version 5.0.0.0) che dipende da Microsoft.Owin(Version 2.0.0.0) che è diversa dal file installato, ovvero Microsoft.Owin(Version 2.0.1.0).
In effetti tale dipendenza è facilmente verificabile usando Reflector:
Come riportato nella documentazione .NET, Specifying assembly binding in configuration files, in questi casi è sempre possibile utilizzare il binding redirect per specificare manualmente l'effettiva versione da utilizzare:
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.1.0" />
</dependentAssembly>
Quindi per risolvere il problema basta aprire il file appConfig del progetto WebApiRole:
e aggiungere le seguenti righe:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Con queste modifiche, l'esempio di un servizio WebAPI hostato in un Azure Work Role dovrebbe proprio funzionare.
Happy Coding!