SpeechRecognizer
和语音 SDK 中的其他对象在适当的时候自动连接到语音服务。 有时,可能需要额外控制连接的开始和结束时间,或者需要有关语音 SDK 何时建立或失去连接的更多信息。 Connection
支持类提供此功能。
可以通过静态 Connection
工厂方法(例如针对 From...
的 Connection::FromRecognizer(recognizer)
)从大多数顶级语音 SDK 对象获取 SpeechRecognizer
。
var connection = Connection.FromRecognizer(recognizer);
auto connection = Connection::FromRecognizer(recognizer);
Connection connection = Connection.fromRecognizer(recognizer);
当语音 SDK 与语音服务的连接发生相应的状态更改时,Connection
会引发 Connected
和 Disconnected
事件。 可以侦听这些事件以了解最新的连接状态。
connection.Connected += (sender, connectedEventArgs) =>
{
Console.WriteLine($"Successfully connected, sessionId: {connectedEventArgs.SessionId}");
};
connection.Disconnected += (sender, disconnectedEventArgs) =>
{
Console.WriteLine($"Disconnected, sessionId: {disconnectedEventArgs.SessionId}");
};
connection->Connected += [&](ConnectionEventArgs& args)
{
std::cout << "Successfully connected, sessionId: " << args.SessionId << std::endl;
};
connection->Disconnected += [&](ConnectionEventArgs& args)
{
std::cout << "Disconnected, sessionId: " << args.SessionId << std::endl;
};
connection.connected.addEventListener((s, connectionEventArgs) -> {
System.out.println("Successfully connected, sessionId: " + connectionEventArgs.getSessionId());
});
connection.disconnected.addEventListener((s, connectionEventArgs) -> {
System.out.println("Disconnected, sessionId: " + connectionEventArgs.getSessionId());
});
Connection
具有用于启动或结束与语音服务的连接的显式方法。 可能想要控制连接的原因包括:
- 预连接到语音服务以允许首次交互尽快开始。
- 在应用程序逻辑中的特定时间建立连接,以正常且可预测的方式处理初始连接失败。
- 当你不希望立即重新连接,但同时也不希望销毁对象时,断开连接以清除空闲连接。
关于手动修改连接状态时的行为的一些重要说明:
- 在已连接的情况下尝试连接不会生成错误。 若要了解当前连接状态,请监视
Connected
和Disconnected
事件。 - 由于与语音服务无关的问题而导致的连接失败(例如试图从无效状态进行连接),这会导致编程语言出现相应的错误。 需要网络解析的失败(例如身份验证失败)不会导致错误,而是在从中创建了
Connection
的顶级对象上生成Canceled
事件。 - 在正在交互期间手动断开与语音服务的连接会导致连接错误,并丢失该交互的数据。 连接错误会显示在相应顶级对象的
Canceled
事件中。
try
{
connection.Open(forContinuousRecognition: false);
}
catch (ApplicationException ex)
{
Console.WriteLine($"Couldn't pre-connect. Details: {ex.Message}");
}
// ... Use the SpeechRecognizer
connection.Close();
try
{
connection->Open(false);
}
catch (std::runtime_error&)
{
std::cout << "Unable to pre-connect." << std::endl;
}
// ... Use the SpeechRecognizer
connection->Close();
try {
connection.openConnection(false);
} catch {
System.out.println("Unable to pre-connect.");
}
// ... Use the SpeechRecognizer
connection.closeConnection();