测试部署TTSServer 问题记录

17年12月1 日

昨天我把本地的TTSServer 部署到服务器iis上。却在测试运行时产生报错,但是程序部署在本地确实OK 的。受限与只是服务器上出现的问题,没有办法本地调试。首先在程序中入log 日志,确定程序出错的位置,出错的原因。加过之后再次部署到站点上。发现程序进行到使用System.Speech 时就报错了(未将引用对象设置到对象实例),不在运行下去。初步怀疑是对SpeechSynthesizer speechSyn = new SpeechSynthesizer(); 实例化的时候没有找到 Speech.DLL。于是我做了很多操作,更改Speech.dll的属性把Speech.Dll添加到bin目录下面,想着程序直接引用Speech.Dll但是在更改后refence 里面的属性地址却会自动更改回来,因为它是.net内的。之后怀疑很多问题,百度了很多东西,却都没有找到原因。总结一下,做了哪些事情:

  • 注释掉文字转语音的代码,验证webService 是否正常工作。结果:webService正常工作。
  • 把文字转语音的程序拿出来放在console||from 程序里面,验证tts是否OK。结果:这个两个程序都可以正常使用,转成语音文件。

转折点:我想如果是在vs调试中出现错误一定会有很多错误信息,我需要查看这些所有的错误信息。

于是百度,c# 可以把所有的错误信息记录下来的方法。http://www.cnblogs.com/zjfree/archive/2011/02/22/1961570.html

得到了错误的所有信息,并用此信息直接google,发现原来有人与我发生过同样的错误,是为iis没有写入注册表的权限。我是用他所说的方法验证了我的问题是否与之一致。最终验证结果我也是这个问题。得到了解决方案。赋予程序权限,比较简单的方法是在应用程序池中解决。为其配置一个user 用户账号。或者是高级设置,标识中为改为LocalSystem 或者LocalService都可以。

总结:

这次在TTS 迁移部署时产生了问题。这不是一个问题,是层层递进的,先是显示配置文件出错,一开始一直解决这个问题。这个处理完成才把注意力放到 “未将引用设置到对象实例”的问题上,在这个方面上浪费了大量的时间,精力。还是在最后得到所有的错误信息,才找到解决办法的。说明解决问题一定要找到错误的根源,认清问题的本质,才能更好更快的解决问题。不能瞎撞,得不到结果。

我犯的错误是:

处处怀疑,在一开始得到错误信息,查明错误位置,就应该专注解决问题,而不是反复实验,浪费时间。

想而不做,一开始就想到了要得到所有的错误信息,当时一下子没有解决,就放在了一边,没有实施。

吸取的教训:

程序出现了错误一定要得到所有的错误信息,有利于对错误的处理,google上搜索有可能你遇到的问题是别人遇到过的,这个就可以更快的解决。不要,千万不要把时间花费在与之无关的事物上,不能把所有的都尝试一遍,这是没有任何意义的,尤其是在网上查询出来的结果,不知道是自己表述有问题,还是其它的,自己的问题可能是与之不一样的。

对以后编程的规划:

  • 记录日志是很重要的,合理的记录日志能够立马发现程序存在的问题,不要记录无用的日志信息。
  • 程序报错的记录,记录所有的错误异常信息。

results matching ""

    No results matching ""