我有一个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有困难?关于什么是错误或如何诊断/修复它的任何想法?
答案 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="data source=.\sqlexpress;initial catalog=DatabaseName;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />