Я столкнулся с той же самой проблемой с страницей Ashx.
Я точно не понимаю, почему, но, похоже, вам нужно использовать отдельный поток и ждать его завершения.
У меня работал следующий код:
public byte[] TextToBytes(string textToSpeak)
{
byte[] byteArr = null;
var t = new System.Threading.Thread(() =>
{
SpeechSynthesizer ss = new SpeechSynthesizer();
using (MemoryStream memoryStream = new MemoryStream())
{
ss.SetOutputToWaveStream(memoryStream);
ss.Speak(textToSpeak);
byteArr = memoryStream.ToArray();
}
});
t.Start();
t.Join();
return byteArr;
}