как насчет конкатенации:
String oTime = myTimeSpan.ToString("h") + "h " +
myTimeSpan.ToString("m") + "m " +
myTimeSpan.ToString("s") + "s "
UPDATE 1:
Вы можете избежать этого с помощью одиночной кавычки: h'h 'm'm 's's'
Эта ошибка обычно означает, что целевая машина запущена, но служба, к которой вы пытаетесь подключиться, недоступна.
На английском языке: подключение к машине (удаленный хост / сервер / ПК, на котором работает служба) было сделано, но поскольку служба не была доступна на этой машине, машина не знала, что делать с запросом.
Если соединение с машиной недоступно, вы увидите другую ошибку , Я забыл, что это такое, но это по строкам «Service Unreachable» или «Unavailable».
Редактировать - добавлено
Возможно, это вызвано блокировкой брандмауэра порт, но, учитывая, что вы говорите, что это прерывистый («иногда, когда клиент пытается подключиться»), это очень маловероятно. Я не включал это изначально, потому что я решил это умственно, прежде чем ответить.
Я получил эту ошибку при вызове веб-сервиса. Эта проблема также была связана с безопасностью транспортного уровня. Я мог бы вызвать веб-сервис через проект веб-сайта, но при повторном использовании одного и того же кода в тестовом проекте я получил бы WebException, содержащее это сообщение. Добавив следующую строку перед тем, как решить проблему, проблема:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Изменить
System.Net.ServicePointManager.SecurityProtocol - это свойство выбирает версию протокола Secure Sockets Layer (SSL) или Transport Layer Security (TLS) для использования для новых подключений, использующих только протокол Secure Hypertext Transfer Protocol (HTTPS); существующие соединения не изменяются.
Я считаю, что конфигурация
SecurityProtocol
важна во время установления связи TLS при выборе версии протокола.TLS handshake - этот протокол используется для обмена всей информацией, необходимой обеим сторонам для обмена фактическими данными приложения с помощью TLS.
ClientHello - клиент отправляет сообщение ClientHello с указанием самой высокой версии протокола TLS, которую он поддерживает ...
ServerHello - сервер отвечает сообщением ServerHello, содержащим выбранную версию протокола ... Выбранная версия протокола должна быть самым высоким, что и клиентская, и серверная поддержка. Например, если клиент поддерживает TLS версии 1.1, а сервер поддерживает версию 1.2, следует выбрать версию 1.1; версия 1.2 не должна быть выбрана.
Моим конкретным сценарием было то, что у службы приложений Azure была минимальная версия TLS, измененная на 1.2
. Я не знаю, является ли это по умолчанию с этого момента, но изменение его обратно на 1.0 заставило его работать .
Вы можете получить доступ к настройке внутри «Настройки SSL».
По какой-то причине соединение с сервером было потеряно. Возможно, сервер явно закрыл соединение, или ошибка на сервере вызвала его неожиданное закрытие. Или что-то между клиентом и сервером (коммутатором или маршрутизатором) удалило соединение.
Это может быть код сервера, который вызвал проблему, и может быть и не так. Если у вас есть доступ к серверному коду, вы можете поместить некоторую отладочную информацию, чтобы сообщить вам, когда клиентские соединения закрыты. Это может дать вам некоторое представление о том, когда и почему соединения удаляются.
На клиенте вам нужно написать свой код, чтобы учесть возможность сбоя сервера в любое время. Так оно и есть: сетевые соединения по своей сути ненадежны.
Вызовы к службам HTTPS с одного из наших серверов также бросали сообщение «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто». Однако HTTP-сервис работал нормально. Использовал Wireshark, чтобы убедиться, что это был отказ от подтверждения TLS. Закончилось то, что набор шифров на сервере необходимо обновить.
У меня было приложение сторонней стороны (Fiddler), чтобы попытаться просмотреть отправленные запросы. Закрытие этого приложения зафиксировало это для меня
Это не поможет для прерывистых проблем, но может быть полезно для других людей с аналогичной проблемой.
Я клонировал виртуальную машину и запустил ее в другой сети с новым IP-адресом, но не изменил привязки в IIS. Fiddler показывал мне «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом», и IE сказал мне «Включите TLS 1.0, TLS 1.1 и TLS 1.2 в дополнительных настройках». Изменение привязки к новому IP-адресу решило его для меня.
Я получаю эту проблему в прошлом. Я использую PostgreSQL, и когда я запускаю свою программу, иногда она подключается, и иногда она выдает такую ошибку.
Когда я экспериментирую с моим кодом, я помещаю свой код подключения в первую строку ниже публичная форма. Вот пример:
ПЕРЕД:
public Form1()
{
//HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
//CODE
//CODE AGAIN
//ANOTHER CODE
//CODE NA NAMAN
//CODE PA RIN!
//Connect to Database to generate auto number
NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
iConnect.Open();
NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
NpgsqlDataReader iRead = iQuery.ExecuteReader();
NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);
DataSet iDataSet = new DataSet();
iAdapter.Fill(iDataSet, "ID");
MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
}
СЕЙЧАС:
public Form1()
{
//Connect to Database to generate auto number
NpgsqlConnection iConnect = new NpgsqlConnection("Server=localhost;Port=5432;User ID=postgres;Password=pass;Database=DB");
iConnect.Open();
NpgsqlCommand iQuery = new NpgsqlCommand("Select * from table1", iConnect);
NpgsqlDataReader iRead = iQuery.ExecuteReader();
NpgsqlDataAdapter iAdapter = new NpgsqlDataAdapter(iQuery);
DataSet iDataSet = new DataSet();
iAdapter.Fill(iDataSet, "ID");
MessageBox.Show(iDataSet.Tables["ID"].Rows.Count.ToString());
//HERE LIES SOME CODES FOR RESIZING MY CONTROLS DURING RUNTIME
//CODE
//CODE AGAIN
//ANOTHER CODE
//CODE NA NAMAN
//CODE PA RIN!
}
Я думаю, что программа должна сначала прочитать соединение, прежде чем что-либо делать, Я не знаю, исправьте меня, если я ошибаюсь. Но, согласно моим исследованиям, это не проблема кода - это было на самом деле от самой машины.
Happy Coding!
Это решило мою проблему. Я добавил эту строку до того, как будет сделан запрос:
System.Net.ServicePointManager.Expect100Continue = false;
Казалось, что существует прокси-сервер на сервере, который не поддерживает поведение 100-continue.
Не знаю, какие из исправлений в этих блогах помогли, но один из них отсортировал эту проблему для меня ...
и
System.Net.ServicePointManager.Expect100Continue = false;
Эта проблема возникает из-за причины прокси-сервера, реализованного на веб-сервере. Чтобы обойти прокси-сервер, поместив эту строку перед вызовом службы отправки.