У меня действительно странная проблема с WCF. Мне нужно реализовать некоторые способы восстановления для службы WCF, если не получен IP-адрес конечной точки или служба не может выполнить привязку.
Эта процедура проста, если приложение завершается с ошибкой при создании службы, оно завершает его, запрашивает у пользователя другой IP-адрес и выполняет еще одну попытку создания службы. (Фрагмент кода ниже). Если адрес недействителен, я получаю сообщение об ошибке «Ошибка TCP (10049: запрошенный адрес недопустим в своем контексте) во время прослушивания исключения IP Endpoint = .121.10.11.11», но по любой причине, если я попытаюсь вторую попытку с действительный адрес У меня такое же исключение с неправильным IP-адресом из предыдущей попытки. Вот код:
ServiceHost service = null;
try
{
Uri[] uris = { new Uri(Constants.PROTOCOL + "://" + address + ":" + port) };
service = new ServiceHost(typeof(IRemoteService), uris);
NetTcpBinding tcpBinding =
WcfTcpRemoteServicesManager.LessLimitedNewNetTcpBinding(int.MaxValue,
int.MaxValue, int.MaxValue);
ServiceEndpoint ep = service.AddServiceEndpoint(implementedContract.FullName,
tcpBinding, serviceName);
var throttle =
service.Description.Behaviors.Find<ServiceThrottlingBehavior>();
if (throttle == null)
{
throttle = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = Constants.MAX_CONCURRENT_CALLS,
MaxConcurrentSessions = Constants.MAX_CONCURRENT_SESSIONS,
MaxConcurrentInstances = Constants.MAX_CONCURRENT_INSTANCES
};
service.Description.Behaviors.Add(throttle);
}
service.Open();
}
catch (Exception e)
{
_debugLog.WriteLineMessage(
"Failed to open or create service exception. Exception message:" +
e.Message);
if (service!=null)
{
try
{
service.Close();
}
catch (Exception)
{
service.Abort();
service.Close();
throw e;
}
}
}
Спасибо