尝试找出我的WCF服务为什么无法工作

4
一年多以前,我在使用VS 2008编写WCF服务。这个服务运行在我编写的Windows服务下,并且一直在那里运行。不幸的是,其他项目/优先事项出现了,阻止我继续进行该项目,直到现在。
现在我想回到它。然而,这一次我想知道是否可以使用VS 2010和.NET 4,而不是.NET 3.5。我打开了命令提示符,运行SvcUtil以获取wsdl信息,然后将其放入配置文件中,为我正在尝试开始编写的新WPF应用程序做准备。唯一的问题是,我一直收到一个错误,说我无法连接服务器等。
所以,我从服务器上复制了.exe.config文件到我的机器上,我可以使用SvcConfigEditor对其进行编辑。我已经进行了更改,将其放回到服务器上,并在尝试运行SvcUtil时出现了一个错误,但更糟糕的是,我没有看到我期望看到的.svclog文件。因此,我进入了服务器的服务应用程序。我找到了一年前编写的Windows服务;看到它正在运行,然后停止并重新启动了它。
现在我有了不同的问题。我的Windows服务启动,但立即停止。我收到这条消息,说服务已经启动,然后停止,并说有时会发生这种情况,例如性能日志和警报服务。我已经检查了服务器上的事件日志,然后唯一与此Windows服务相关的事情是它进入了启动状态,然后进入了停止状态。
啊,在尝试4次启动之后,它终于在事件日志中给了我一个错误!(为什么它一开始就没有这样做呢?谁说一遍又一遍地做同样的事情,并期望有不同的结果是疯狂的表现,明显前三次它没有在事件日志中注册任何内容,但第四次却有。)
这里是错误:
事件类型:错误 事件来源:Service1 事件类别:无 事件ID:0 日期:2011年5月4日 时间:上午10:14:46 用户:N/A 计算机:HELIOS 说明: 无法启动服务。System.TypeInitializationException: 'System.ServiceModel.DiagnosticUtility'的类型初始值设定项引发异常。--->System.Configuration.ConfigurationErrorsException: 找不到类型 用于类System.Diagnostics.XmlWriterTraceListener,System,Version=4.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089。 at 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>

1
运行服务的系统上是否安装了.NET 4.0? - John Saunders
不,我感觉很愚蠢。谢谢你,约翰。 - Rod
1个回答

5

这个问题在评论中已经得到了回答,但是我在Visual Studio 2010中发现了一个陷阱,可能会导致类似的情况。

即使将目标框架设置为3.x版本的WCF项目,在使用2010 SvcConfigEditor时,它会自动插入"System.Diagnostics.XmlWriterTraceListener,System,Version=4.0.0.0...",尽管应该插入"System.Diagnostics.XmlWriterTraceListener,System,Version=2.0.0.0..."。当部署修改后的web.config到不配置为使用.NET 4.0框架的IIS托管服务时,这会让你措手不及。解决方法很简单,只需将web.config编辑回"Version=2.0.0.0"即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接