我正在从事一个项目,该项目具有一个共享核心组件,该组件使用 <appSettings />相应配置文件中的部分。
这适用于使用 web.config 的 asp.net Web 部件。
但是,有一个 Windows 服务使用相同的共享核心组件,它(出于各种原因)直接从内部访问配置数据(即对 ConfigurationManager.AppSettings["key"] 的嵌入式调用),我无法轻易重构。
这不是问题,但我发现 Web 服务似乎无法获取我添加到其 app.config 中的 appSettings 值。当我将它部署到开发服务器时,它当然会变成 ServiceName.exe.config 并且配置文件在其他方面正常运行(它还包含一些 <applicationSettings /> 类型安全设置,这些设置按预期工作。
由于我无法轻松更改共享组件,因此我不得不以某种方式处理 <appSettings /> 问题。在服务的 app.config 文件中。
我检查过的事情:结构看起来不错:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="xxxxx.UploadManagerService.UploadManager" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<xxxxx.UploadManagerService.UploadManager>
<setting name="NumberOfUploaderThreads" serializeAs="String">
<value>2</value>
</setting>
:
</xxxxx.UploadManagerService.UploadManager>
</applicationSettings>
<appSettings>
<add key="keyname" value="value" />
:
</appSettings>
</configuration>
(其中:表示“更多相同”:-)
服务运行正常,除了核心组件中的方法尝试访问任何 <appSettings />值(value)观。
有什么方法可以让它与 Windows 服务一起正常工作吗?我看不出它为什么不应该正常工作的任何原因,但它却没有(当它试图访问任何值时抛出异常)。
这是它掉落的那种地方的碎片:
return SendEmailViaAmazonSES(
new List<string> { clientEmailAddress },
ConfigurationManager.AppSettings["SalesEmail"],
"Order Confirmation.",
content);
...幸运的是,它被困在一个 try:catch 中,因此除了那些 ConfigurationManager.AppSettings["key"] 之外没有任何东西掉下来。调用自始至终都在使用,我无法在不对已经使用该核心组件的其他系统产生重大影响的情况下更改它们。
有什么想法吗?
我检查过的其他事项:服务配置文件与服务 exe 位于同一文件夹中,开发配置确实包含正确的值。
编辑 25/5
因为服务只调用了几个需要访问 <appSettings /> 的方法值,我只是通过将这些方法复制到服务本身并使用 <applicationSettings /> 中的值来作弊。反而。这并不理想,我仍然非常想知道为什么这对 Windows 服务不起作用,但我等不及了,所以我在此期间做出了务实的决定来“捏造它”。我总是可以在以后的某个时候回到这里,或者(碰巧)忘记它;-)
最佳答案
查看运行 Windows 服务的用户是否具有对其 .config 文件的读取权限。
使用Sysinternals Process Monitor并按您的服务名称进行过滤,以查看该进程是否真的尝试通过您期望的路径访问您的文件。
关于c# - Windows 服务,app.config 中 appSettings 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6109065/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?