Я пишу веб-приложение, которое будет размещено в Electron на Raspberry PI. Raspberry PI имеет подключенный сканер отпечатков пальцев, который возвращает мне строку, которую мне нужно проверить, зарегистрирован ли отпечаток в моей базе данных на другом сервере. Я делаю это, вызывая метод службы WCF, размещенный в сети.
Теперь проблема в том, что при вызове службы WCF я получаю тайм-аут через 1 минуту (тайм-аут по умолчанию), но он работает, когда я запускаю приложение на локальном компьютере.
Сервисный код:
[ServiceContract(Namespace = "http://192.168.0.154:8733/GlauxSoft.SnackBox.WebService/")]
public interface IService
{
[OperationContract]
Fingerprint GetFingerprintByUniqueId(string uniqueId);
}
public class Service : IService
{
public Fingerprint GetFingerprintByUniqueId(string uniqueId)
{
// This is just a DataBase call, nothing extraordinarily expensive
using (EvidenceSessionHelper.CreateDefaultWebServiceSession())
{
return Fingerprint.MapAuthentifizierungToWebServiceFingerprint(QueryAuthentifizierung.GetFingerprintByUniqueId(uniqueId));
}
}
}
Код потребителя:
[ServiceContract(Namespace = "http://192.168.0.154:8733/GlauxSoft.SnackBox.WebService/", ConfigurationName = "ISnackBoxService")]
public interface ISnackBoxService
{
[OperationContract(
Action ="http://192.168.0.154:8733/GlauxSoft.SnackBox.WebService/IService/GetFingerprintByUniqueId",
ReplyAction = "http://192.168.0.154:8733/GlauxSoft.SnackBox.WebService/IService/GetFingerprintByUniqueIdResponse")]
Fingerprint GetFingerprintByUniqueId(string uniqueId);
}
public class ServiceClient : ClientBase<IService>, IService
{
public SnackBoxServiceClient() :
base(GetDefaultBinding(), GetDefaultEndpointAddress())
{
Endpoint.Name = EndpointConfiguration.BasicHttpBinding_ISnackBoxService.ToString();
}
public enum EndpointConfiguration
{
BasicHttpBinding_ISnackBoxService
}
public Fingerprint GetFingerprintByUniqueId(string uniqueId)
{
return Channel.GetFingerprintByUniqueId(uniqueId);
}
}
Потребитель - приложение ASP.NET Razor, написанное в .NET Core 3 Preview 5
.
И я вызываю код потребителя так:
var service = new ServiceClient();
var evdFingerprint = service.GetFingerprintByUniqueId("Test String"); // <-- Runs for 1 minute and throws the TimeoutException
Вот трассировка стека:
System.TimeoutException: истекло время ожидания канала запроса при попытке отправки после 00:01:00. Увеличьте значение тайм-аута, передаваемое вызову Request, или увеличьте значение SendTimeout в Binding. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания. ---> System.TimeoutException: HTTP-запрос к 'http://192.168.0.154:8733/GlauxSoft.SnackBox.WebService/' превысил установленное время ожидания 00:01:00. Время, отведенное для этой операции, могло быть частью более длительного времени ожидания.
at System.ServiceModel.Channels.HttpChannelFactory`1.HttpClientRequestChannel.HttpClientChannelAsyncRequest.SendRequestAsync (сообщение-сообщение, TimeoutHelper timeoutHelper)
в System.ServiceModel.Channels.RequestChannel.RequestAsync (сообщение, время ожидания TimeSpan)
Редактировать: Я провел дополнительное тестирование, похоже, что ни один HTTP-запрос к моей локальной машине не проходит, как при выполнении wget 192.168.0.154:5106 -o index.html
, и мониторинг моего сетевого трафика с помощью wireshark не отображается мне любые GET-запросы к моему компьютеру, и я тоже собираюсь https://192.168.0.154:5106
раз.
Тем не менее, я могу пропинговать свой локальный компьютер, и я даже могу использовать SSH в Raspberry PI, и я также могу установить сеанс удаленного рабочего стола VNC с моим Raspberry PI
.