从Windows服务访问EF资源时出现问题

时间:2011-05-06 19:01:42

标签: entity-framework windows-services

我有一个WCF服务,它使用实体框架连接到数据库,所有数据都托管在Windows服务中。问题是,当处理第一条消息导致数据库访问时,会抛出异常:“无法解析程序集'MyService.exe'”。基本上,当作为Windows服务运行时,EF无法找到嵌入的资源。

我已经在静态exe中使用.Net Reflector检查了3个资源csdl,ssdl,msl的存在,它们就在那里。我正在使用此连接字符串

    metadata=res:// MyService.exe/MyModel.csdl|
             res:// MyService.exe/MyModel.ssdl| 
             res://MyService.exe/MyModel.msl; provider=...".  

我在Windows服务中添加了代码,以便在服务启动时枚举OnStart方法中的嵌入资源(使用GetExecutingAssembly()。GetManifestResourceNames()),并且它没有显示任何内容。 [当然,win svc是使用installutil + net start安装/运行的]。当我运行一个几乎相同的项目,链接到所有相同的源,包括app.config,作为交互式控制台应用程序(当然不同的Main()),一切正常,包括资源的枚举(所有3个edmx映射文件)在那儿)。 Win Svc在Local System下运行。

有没有其他人在Windows服务中使用EF有困难?关于什么是错误或如何诊断/修复它的任何想法?

1 个答案:

答案 0 :(得分:0)

尝试将“MyService.exe”替换为“*”,如下所示:

<add name="MyEntities" connectionString="metadata=res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\sqlexpress;initial catalog=DatabaseName;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />