Vedere la risposta di ongle qui sotto. È molto meglio di questo.
aggiornato dopo ulteriori informazioni
Di seguito ha lavorato per me. L'ho provato con un nuovo servizio WCF che ho ospitato su IIS attraverso un Service1.svc.
- Aggiungi
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
alla configurazione Web. <system.serviceModel>..</ ..>
esisteva già.
- Aggiungi
AspNetCompatibilityRequirementsAttribute
al servizio con Modalità consentita.
- Utilizzare
HttpContext.Current.Server.MapPath(".");
per ottenere la directory principale.
Di seguito è riportato il codice completo per la classe di servizio. Non ho apportato modifiche all'interfaccia IService1.
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public void DoWork()
{
HttpContext.Current.Server.MapPath(".");
}
}
E di seguito è un estratto da web.config.
<system.serviceModel>
<!-- Added only the one line below -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<!-- Everything else was left intact -->
<behaviors>
<!-- ... -->
</behaviors>
<services>
<!-- ... -->
</services>
</system.serviceModel>
Vecchio risposta
Che cosa si intende per la cartella di lavoro? I servizi WCF possono essere ospitati in diversi modi e con endpoint diversi, pertanto la cartella di lavoro è leggermente ambigua.
È possibile recuperare la normale "cartella di lavoro" con una chiamata a Directory.GetCurrentDirectory().
HttpContext è un oggetto ASP.Net. Anche se WCF può essere ospitato su IIS, non è ancora ASP.Net e per questo motivo la maggior parte delle tecniche ASP.Net non funziona per impostazione predefinita. OperationContext è l'equivalente di HttpContext della WCF. OperationContext contiene informazioni sulla richiesta in entrata, risposta in uscita tra le altre cose.
Anche se il modo più semplice potrebbe essere quello di eseguire il servizio in ASP.Net compatibility mode spostandolo in web.config. Questo dovrebbe darti accesso a HttpContext di ASP.Net. Ti limiterà comunque al * HttpBindings e all'hosting di IIS. Per attivare la modalità di compatibilità, aggiungi quanto segue al web.config.
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
fonte
2009-04-26 19:54:33
Questa soluzione ha funzionato meglio per me: ti consiglio di utilizzarla piuttosto che dover apportare modifiche di qualsiasi tipo ad altre impostazioni ... –
Non ho System.Web.Hosting, davvero non ne conosco il motivo. . . – nXqd
@nXqd È in System.Web.dll tornare al framework 2.0 – ongle