Я подключаюсь к веб-сервису, созданному компанией, которая проверяет электронную почту. Когда я запускаю его локально, я не получаю никаких ошибок, но когда я загружаю модуль на свои компьютеры контроля качества и производства, у меня появляется тайм-аут, я увеличивал тайм-аут до 00:05:00 с 00:01:00, и теперь я получаю ошибку:
Базовое соединение было закрыто: соединение, которое, как предполагалось, было поддержано, было закрыто сервером.mscorlibVoid HandleReturnMessage (System.Runtime.Remoting.Messaging.IMessage, System.Runtime.Remoting.Messaging.IMessage) стек сервера трассировки: в System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException (WebException WebException, HttpWebRequest запрос, HttpAbortReason abortReason) в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply (TimeSpan таймаута) в System.ServiceModel.Channels.RequestChannel .Request (сообщение-сообщение, время ожидания TimeSpan) в System.ServiceModel.Channels.ServiceChannel.Call (действие String, логический метод oneway, операция ProxyOperationRuntime, Object [] ins, Object [] outs, TimeSpan timeout) в System.ServiceModel.Channels.ServiceChannelProxy .InvokeService (метод IMethodCallMessageCall, операция ProxyOperationRuntime) в System.ServiceModel.Channels.ServiceChannelProxy.Invoke (IMessage m essage) Исключение, переброшенное в [0]: в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage (IMessage reqMsg, IMessage retMsg) в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke (MessageData & msgata) Common.SI.EmailVerificationSoap.VerifyEmail (запрос VerifyEmailRequest) по адресу Redacted.Common.SI.EmailVerificationSoapClient.Redacted.Common.SI.EmailVerificationSoap.VerifyEmail (запрос VerifyEmailRequest) по адресу Redacted.Clierfofo.SicInfo. Тайм-аут Int32, SIWsOutputOfVerifyEmailRecord & VerifyEmailResult) в Redacted.Common.ValidationHelper.ValidateEmailByService (электронная почта String) в Redacted.WindowServices.Form3.RunSpFirstTime () ожидаемое соединение было закрыто для того, чтобы соединение было закрыто для того, чтобы было закрыто соединение, которое было закрыто, поскольку исходное соединение было закрыто: .Net.WebResponse GetResponse () в System.Net.HttpWebRequest.GetResponse () в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.Htt pChannelRequest.WaitForReply (TimeSpan timeout) Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом. Считывание SystemInt32 (Byte [], Int32, Int32) в System.Net.Sockets.NetworkStream.Read (Byte [] буфер, смещение Int32, размер Int32) в System.Net.PooledStream.Read (буфер Byte [], смещение Int32, размер Int32) в System.Net.Connection.SyncRead (запрос HttpWebRequest, логический userRetrievedStream, логический probeRead) Существующий соединение было принудительно закрыто удаленным HostSystemInt32 Read (Byte [], Int32, Int32) в System.Net.Sockets.NetworkStream.Read (Byte [] буфер, смещение Int32, размер Int32)
Вот мой код, который подключается к веб-сервису:
using (SI.EmailVerificationSoapClient client = new EmailVerificationSoapClient())
{
var customBinding = new CustomBinding(client.Endpoint.Binding);
var transportElement = customBinding.Elements
.Find<HttpTransportBindingElement>();
transportElement.KeepAliveEnabled = false;
client.Endpoint.Binding = customBinding;
LicenseInfo authHeader = new LicenseInfo();
RegisteredUser regUser = new RegisteredUser
{
UserID = ConfigurationHelper.GetValue("SIUsername"),
Password = ConfigurationHelper.GetValue("SIPassword")
};
authHeader.RegisteredUser = regUser;
SIWsOutputOfVerifyEmailRecord result;
client.VerifyEmail(authHeader, email, 60, out result);
bool hasSucceeded =
result.ServiceStatus.StatusNbr == 200 ||
result.ServiceStatus.StatusNbr == 202 ||
result.ServiceStatus.StatusNbr == 203;
client.Close();
return hasSucceeded;
}
Обратите внимание, что я установил Keep Alive
в значение false, и я создаю и располагаю клиента при каждом вызове в соответствии с рекомендациями, которые я прочитал на других форумах относительно этой проблемы, и она все еще не работает.
Я добавил трассировщик и прочитал журнал трассировки, и там нет информации, он просто показывает ту же ошибку, которую я вставил выше. Я не смог найти веб-запрос в файле reference.cs, чтобы изменить его на keep-alive (это сервис wcf), и я получаю эту ошибку только на производстве
и не мой локальный компьютер.
Есть ли что-нибудь еще, что я могу сделать?