2014-12-20 75 views
0

我在IIS上運行我的應用程序以測試我的服務是否按預期工作。另外,我運行了其他內部班級操作的單元測試。WCF和單元測試的不同SessionContexts

下面是我的會話出廠配置:

Fluently.Configure() 
       .Database(MySQLConfiguration.Standard 
           .ConnectionString(myconnectionString) 
           .ShowSql() 
       ) 
       .CurrentSessionContext<WcfOperationSessionContext>() 
       //.CurrentSessionContext("call") 
       .Mappings(m => 
          m.FluentMappings 
           .AddFromAssemblyOf<DtoDifficulty>()) 
       .BuildSessionFactory(); 

您可以注意到的註釋行,與//.CurrentSessionContext("call「)。當我在IIS上運行我的服務時,我必須使用上面的行。CurrentSessionContext < WcfOperationSessionContext>(),當我運行單元測試時,.CurrentSessionContext(「call」)

有沒有辦法知道哪個案例正在運行並自動設置其中一個選項?

回答

0

我找到了一種方法來選擇正確的上下文。如果我運行我的單元測試,HttpContext.Current返回null。當我運行我的服務時,它返回一個對象的實例。

下面是代碼:

var fluentConfiguration = Fluently.Configure().Database(MySQLConfiguration.Standard 
                   .ConnectionString(myConnectionString) 
                   .ShowSql() 
                  ); 

var hasHttpContext = HttpContext.Current != null; 

if (hasHttpContext) 
    fluentConfiguration.CurrentSessionContext<WcfOperationSessionContext>(); 
else 
    fluentConfiguration.CurrentSessionContext("call"); 

_sessionFactory = fluentConfiguration 
            .Mappings(m => 
               m.FluentMappings 
               .AddFromAssemblyOf<DtoDifficulty>()) 
            .BuildSessionFactory();