Я создал программу под названием «ETM».
Вот пользовательский интерфейс:
http://i67.tinypic.com/so3h21.jpg
Эта программа используется для отправки данных о текущих курсах валют в таблицы курсов валют. (изображение таблицы: http://i66.tinypic.com/wjguaa.jpg)
Эти таблицы являются типами принтеров, доступ к которым осуществляется через серверы печати через локальную сеть. Компания, которая использует эту программу, имеет около 50 таблиц по всей стране (информация о сервере печати: https://www.tp -link.com / us / products / details / TL-PS110P.html )
Программа имеет два режима: РУЧНОЙ РЕЖИМ и АВТОМАТИЧЕСКИЙ РЕЖИМ.
1) РУЧНОЙ РЕЖИМ позволяет пользователю вводить курсы в текстовые поля, затем нажимать кнопку «ОТПРАВИТЬ ДАННЫЕ», и введенные курсы валют будут отображаться во всех таблицах.
2) АВТОМАТИЧЕСКИЙ РЕЖИМ получает курсы валют от службы каждые 20 секунд и выполняет ту же логику, что и РУЧНОЙ РЕЖИМ, если ставки изменились.
// Table object implementation
public class ExchangeTable : ITable {
public string TableName { get; set; }
public IPAddress IPAddress { get; set; }
public int Port { get; set; }
public IEnumerable<Currency> Currencies { get; set; }
public string LogMessage { get; set; }
}
// Currency object implemetation
public class Currency {
public object CurrencyName { get; set; }
public string BuyPrice { get; set; }
public string SellPrice { get; set; }
}
Когда программа запускается, пользователь проверяет таблицы из флажка списка, затем использует кнопку «SEND DATA» в ручном режиме или кнопку «START PROCESS» в режиме AUTO MODE.
выполнить операцию.
// data sending logic
public virtual void SendDataToTable(ITable table) {
if (table != null && table.Currencies != null) {
using (TcpClient client = new TcpClient()) {
try {
string dataToSend = GetPrintString(GetPrices(table));
client.Connect(table.IPAddress, table.Port);
if (client.Connected) {
byte[] buffer = Encoding.ASCII.GetBytes(dataToSend);
using (NetworkStream stream = client.GetStream()) {
stream.Write(buffer, 0, buffer.Length);
}
if (table is ExchangeTable)
((ExchangeTable)table).LogMessage = "SUCCESS";
}
}
catch (Exception ex) {
if (table is ExchangeTable)
((ExchangeTable)table).LogMessage = "FAILURE: " + ex.Message;
}
}
}
}
После этого все работает нормально. все 50 таблиц показывают правильные данные, но через некоторое время (около 1 часа или более) 5 таблиц (всегда одни и те же таблицы) показывают неправильные символы, остальные 45 таблиц по-прежнему показывают правильные данные. Все эти 50 таблиц одинаковы. Я понятия не имею, почему это происходит только с 5 таблицами, а не со всеми. У вас есть идеи, как решить эту проблему? (