如何使用语音 SDK 监视和控制服务连接

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 会引发 ConnectedDisconnected 事件。 可以侦听这些事件以了解最新的连接状态。

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 具有用于启动或结束与语音服务的连接的显式方法。 可能想要控制连接的原因包括:

  • 预连接到语音服务以允许首次交互尽快开始。
  • 在应用程序逻辑中的特定时间建立连接,以正常且可预测的方式处理初始连接失败。
  • 当你不希望立即重新连接,但同时也不希望销毁对象时,断开连接以清除空闲连接。

关于手动修改连接状态时的行为的一些重要说明:

  • 在已连接的情况下尝试连接不会生成错误。 若要了解当前连接状态,请监视 ConnectedDisconnected 事件。
  • 由于与语音服务无关的问题而导致的连接失败(例如试图从无效状态进行连接),这会导致编程语言出现相应的错误。 需要网络解析的失败(例如身份验证失败)不会导致错误,而是在从中创建了 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();

后续步骤