Deploying Web App - System.Speech.DLL object reference not set to instance of an object

on Apr 13, 2015 12:17 AM

I have an ASP.NET web application that uses System.Speech to transform text to a WAV file.  It works fine locally but when I deploy it to the server, I get the below error message. This is using Windows Server 2012, ASP.NET 4.5, and IIS 8.5:

    Object reference not set to an instance of an object.
       at System.Speech.Internal.ObjectTokens.RegistryDataKey..ctor(String fullPath, RegistryDataKey copyKey)
       at System.Speech.Internal.ObjectTokens.SAPICategories.DefaultDeviceOut()
       at System.Speech.Internal.Synthesis.VoiceSynthesis..ctor(WeakReference speechSynthesizer)
       at System.Speech.Synthesis.SpeechSynthesizer.get_VoiceSynthesizer()
       at QuinnSDS.handlerTransform.<>c__DisplayClass6.<ProcessRequest>b__1()

The code which is generating this error message runs on the server:

if (context.Request.ContentLength > 0)
        string line = new StreamReader(context.Request.InputStream).ReadToEnd();
        // *********  generate wav file voicing the response *****************
        // Using Microsoft voices
        // initiate new instance of speech synthesizer
        Thread t = new Thread(() =>
                // The object creation works fine
                System.Speech.Synthesis.SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer();  
                if (synth != null)
                    // The code breaks at synth.GetInstalledVoices() below. It will break any time I try to do anything with the synth object
                    foreach (System.Speech.Synthesis.InstalledVoice voice in synth.GetInstalledVoices())  
                                        System.Speech.Synthesis.VoiceInfo info = voice.VoiceInfo;
                                        string voiceName = info.Name;
             catch (Exception e)
             //... code continues...

It does not break when the Speech Synthesis object is created; it breaks whenever I try to use that object in any way.

I'm not sure if it's an access issue but I'm pretty new to ASP.NET and IIS and I can't figure out how to give the web app access to the GAC or if that's even what the problem is. I tried changing the property Local Copy for the System.Speech reference to True in Visual Studio, before I deploy the app, but that hasn't worked. I searched online and while the "object reference not set to an instance of an object" seems fairly common, I cannot find any similar issues where it is because of a .NET framework class library...I have run the text-to-speech code locally on the server and it ran fine. I have not run the entire app locally on the server because the web app requires speech input and there is not a microphone on the server.

Download FREE API for Word, Excel and PDF in ASP.Net: Download
on Apr 13, 2015 12:45 AM

You need to check whether Speech API is available on the Windows Server OS.

Or you might have to install