2017-06-13 119 views
-3

我有一个C#DLL来查询数据使用实体框架。之后,我使用owin创建一个rest api来引用dll来获取数据。我有两个示例:一个是使用控制台应用程序访问数据,并没有问题。另一个是我把其余的API放在Windows服务中,然后访问它。它返回空。我不知道为什么。Windows服务访问LocalDb返回空

C#DLL:

+0

可能会添加一些代码,以便我们可以看到您尝试过什么? –

回答

0

EF DLL:

public class DemoContext:DbContext 
{ 
    private static DemoContext _instance; 
    public DemoContext() : base("MyDemoConnection") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoContext, Configuration>()); 
    } 

    public static DemoContext Instance 
    { 
     get 
     { 
      if (_instance == null) 
      { 
       _instance = new DemoContext(); 
      } 
      return _instance; 
     } 
    } 

    public DbSet<Student> Students { get; set; } 

    public DbSet<Teacher> Teachers { get; set; } 
} 

owin API:

public class Startup 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
     // Configure Web API for self-host. 
     HttpConfiguration config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     appBuilder.UseWebApi(config); 
    } 
} 
public class TeachersController : ApiController 
{ 

    [HttpGet] 
    [Route("api/teachers")] 
    public HttpResponseMessage Get() 
    { 
     try 
     { 
      var _context = DemoContext.Instance; 
      var teachers = _context.Teachers.ToList(); 
      var response = Request.CreateResponse(HttpStatusCode.OK, teachers); 
      return response; 
     } 
     catch (Exception ex) 
     { 
      return Request.CreateResponse(HttpStatusCode.OK, ex.Message); 
     } 

    } 
} 

控制台应用程序:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string baseAddress = "http://localhost:9000/"; 

     // Start OWIN host 
     using (WebApp.Start<Startup>(url: baseAddress)) 
     { 
      // Create HttpCient and make a request to api/values 
/*    HttpClient client = new HttpClient(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      var response = client.GetAsync(baseAddress + "api/values").Result; 
      var result = response.Content.ReadAsStringAsync().Result; 
      Console.WriteLine(result);*/ 
      Console.ReadLine(); 
     } 
    } 
} 

windowservice:

public partial class HostOwin : ServiceBase 
{ 
    private IDisposable owin; 
    public HostOwin() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     string baseAddress = "http://localhost:9000/"; 
     owin = WebApp.Start<Startup>(url: baseAddress); 

    } 

    protected override void OnStop() 
    { 
     owin.Dispose(); 
    } 
} 
+0

对于控制台应用程序和windowservice,我创建一个httprequest来访问数据,控制台应用程序很好地返回,但windowservice返回空 –