一年多以前,我一直致力于使用VS 2008编写的WCF服务。它在Windows服务下运行,我也写过。从那时起它一直在那里运行。不幸的是,其他项目/优先事项已经出现,阻止我继续这个项目,直到现在。
现在我想回到它。但是,我试图找出是否可以使用VS 2010和.NET 4而不是.NET 3.5。我已经启动了命令提示符,运行SvcUtil,以获取wsdl信息,我将把它放入配置文件中,用于我正在尝试开始编写的新WPF应用程序。唯一的问题是,我一直收到错误,说我无法到达服务器等等。
所以,我将.exe.config文件从服务器复制到我的机器,在那里我可以用SvcConfigEditor编辑它。我已经做了这些更改,把它放回到服务器上,并在尝试运行SvcUtil时出错,但比我没看到我希望看到的.svclog文件更糟糕。所以我进入了服务器的服务应用程序。我找到了一年前写的Windows服务;看到它正在运行,并停止并再次启动它。
现在我遇到了另一个问题。我的Windows服务启动,但随后立即停止。我收到此消息说该服务已启动然后停止,并说有时会发生不同类型的服务,如性能日志和警报服务。我检查了服务器上的事件日志,然后只有与此Windows服务相关的事情是它进入启动状态然后进入停止状态。
啊,在尝试启动它4次之后,它最终在事件日志中给了我一个错误! (为什么不首先做到这一点?谁说试图一遍又一遍地做同样的事情,并期待不同的结果是疯狂的迹象,显然前3次它没有注册任何东西在事件日志中,但在第4次尝试它。)
这是错误:
事件类型:错误 事件来源:Service1 活动类别:无 事件ID:0 日期:2011年5月4日 时间:上午10:14:46 用户:N / A. 电脑:HELIOS 描述: 服务无法启动。 System.TypeInitializationException: 'System.ServiceModel.DiagnosticUtility'的类型初始值设定项 抛出一个例外。 ---> System.Configuration.ConfigurationErrorsException:找不到类型 for class System.Diagnostics.XmlWriterTraceListener,System,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089。 在System.Diagnostics.TraceUtils.GetRuntimeObject(String className,Type baseType, String initializeData)
这是SvcConfigEditor放入.config文件的新代码段:
<sharedListeners>
<add initializeData="C:\Program Files\ASIWindowsService\ASIWindowsService_tracelog.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelTraceListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
<add initializeData="C:\Program Files\ASIWindowsService\ASIWindowsService_messages.svclog"
type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
name="ServiceModelMessageLoggingListener" traceOutputOptions="Timestamp">
<filter type="" />
</add>
</sharedListeners>
答案 0 :(得分:5)
在评论中回答了这个问题,但我在Visual Studio 2010中看到过一些可能导致类似情况的问题。
即使目标框架设置为WCF项目的版本3.x,使用2010 SvcConfigEditor也会自动插入“System.Diagnostics.XmlWriterTraceListener,System,Version = 4.0.0.0 ...”,尽管它应该插入“System.Diagnostics.XmlWriterTraceListener,System,Version = 2.0.0.0 ...”在将已更改的web.config部署到IIS托管服务时,这将使您感到困惑,其中AppPool 不配置为使用.NET 4.0框架。修复只是将web.config编辑回“Version = 2.0.0.0”。