我有一个StreamSocketListener
注册在后台任务。后台StreamSocketListener只运行一次
当它收到请求时,Run
方法开始。
运行状况良好的第一次,第二次我得到这个错误:
O identificador de objeto não representa um objeto válido. (Exception from HRESULT: 0x800710D8)
完整的代码是:
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
var details = (SocketActivityTriggerDetails)taskInstance.TriggerDetails;
var socketInformation = details.SocketInformation;
try
{
ShowToast(details.Reason.ToString());
if (details.Reason == SocketActivityTriggerReason.ConnectionAccepted &&
socketInformation.SocketKind == SocketActivityKind.StreamSocketListener)
{
using (IOutputStream output = socketInformation.StreamSocket.OutputStream)
{
string str = "Tudo certo\r\n";
var conteudo = $"HTTP/1.1 200 OK\r\nConnection: Close\r\nContent-Length: {str.Length}\r\n\r\n{str}";
using (Stream stream = output.AsStreamForWrite())
{
var bodyArray = Encoding.UTF8.GetBytes(conteudo);
stream.Write(bodyArray, 0, bodyArray.Length);
}
}
}
}
catch (Exception e)
{
ShowToast(e.Message);
StreamSocketListener socket = new StreamSocketListener();
socket.EnableTransferOwnership(taskInstance.Task.TaskId, SocketActivityConnectedStandbyAction.DoNotWake);
await socket.BindServiceNameAsync("8080");
await socket.CancelIOAsync();
socket.TransferOwnership("Teste");
}
deferral.Complete();
}
官方示例只是告诉StreamSocket,而不是StreamSoketListener :( –