2011-05-04 82 views
4

一年前,我一直在使用VS 2008编写的WCF服务。它运行在我也写过的Windows服务下。它从那以后一直在那里运行。不幸的是,其他项目/优先事项已经出现,直到现在,阻止我继续该项目。试图找出为什么我的WCF服务不能正常工作

现在我试图回到它。但是,这个问题我想知道我是否可以使用VS 2010和.NET 4,而不是.NET 3.5。我已经提出了命令提示符,运行SvcUtil,以获取wsdl信息,我将把它放入配置文件中,供我尝试开始编写的新WPF应用程序使用。唯一的问题是,我不断收到错误,说我无法访问服务器等。

因此,我将.exe.config文件从服务器复制到我的机器,在那里我可以使用SvcConfigEditor进行编辑。我已经做出了这些修改,并将其放回到服务器上,并在尝试运行SvcUtil时出错,但比我没有看到预期会看到的.svclog文件更糟糕。所以我进入了服务器的服务应用程序。我找到了一年前我写的Windows服务;看到它正在运行,并停止并再次启动。

现在我有一个不同的问题。我的Windows服务启动后,立即停止。我收到这条消息,说服务已经开始,然后停止,并说有时会发生在不同种类的服务上,例如性能日志和警报服务。我检查了服务器上的事件日志,然后只有与此Windows服务相关的事情是它进入了开始状态,然后进入停止状态。

啊,试图启动它4次后,它终于在事件日志中给我一个错误! (为什么它首先不这样做呢?谁说一遍又一遍地尝试做同样的事情,并期待不同的结果是疯狂的标志,当明确的前3次它没有注册任何东西在事件日志中,但4日尝试做)

这里的错误:

Event Type: Error Event Source: Service1 Event Category: None Event ID: 0 Date: 5/4/2011 Time: 10:14:46 AM User: N/A Computer: HELIOS Description: Service cannot be started. System.TypeInitializationException: The type initializer for 'System.ServiceModel.DiagnosticUtility' threw an exception. --->System.Configuration.ConfigurationErrorsException: Couldn't find type for class 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? – 2011-05-04 16:37:28

+0

恩,没有。男人,我觉得很愚蠢。谢谢,约翰。 – Rod 2011-05-04 17:14:13

回答

5

这个问题在评论中得到了回答,但有一个问题,我是如果在Visual Studio 2010中看到这可能会导致类似的情况。

即使目标框架设置为WCF项目的3.x版本,使用2010 SvcConfigEditor也会自动插入“System.Diagnostics.XmlWriterTraceListener,System,Version = 4.0.0.0 ...”,尽管它应该是插入“System.Diagnostics.XmlWriterTraceListener,系统,版本= 2.0.0.0 ...”这将咬你的部署改变的web.config到IIS托管服务的AppPool是而不是配置为使用.NET 4.0框架。解决方法是简单地将web.config编辑回“Version = 2.0.0.0”。

+1

血腥阴险! – 2012-02-29 20:09:19