Межсерверный код WCF не запускает тайм-ауты TCP и ошибки - PullRequest
0 голосов
/ 11 августа 2011

Я пытался создать протокол межсерверной связи с WCF.Но по какой-то причине, когда сервер отключается, вызываются события Failed и Closed.Это действительно раздражает, но я не нашел решения.

private static ServiceHost loginService;
static void Load() {
    loginService = new ServiceHost(typeof(LoginService), new Uri[] { new Uri(Settings.Instance.LoginServiceURI) });
    loginService.AddServiceEndpoint(typeof(ILoginService), ServiceHelpers.GetBinding(new Uri(Settings.Instance.LoginServiceURI)), Settings.Instance.LoginServiceURI);
    loginService.Faulted += new EventHandler(loginService_Faulted);
    loginService.Open();
}

static void loginService_Faulted(object sender, EventArgs e)
{
    Log.WriteLine(LogLevel.Error, "LoginWCF Faulted. Restarting.");
    loginService.Close();
    Load();
}

Глупо то, что только функции внутри интерфейса ILoginService будут вызывать исключение, когда соединение разорвано.Я думал, что у TCP была своя поддержка?

Ответы [ 2 ]

0 голосов
/ 11 августа 2011

Не все, но некоторые привязки wcf (например, WsHttp и NetTcp) поддерживают надежные сеансы, отметьте http://msdn.microsoft.com/en-us/library/ms733136.aspx.. Его можно использовать для определения, когда служба отключается.

0 голосов
/ 11 августа 2011

На данный момент я не нашел способа определить, является ли канал неисправным или закрытым, пока он не сделает вызов и не получит исключение. Только в том случае, если это вызывает исключение, состояние устанавливается на Failed, поскольку это состояние устанавливается в методе CommunicationObject.Fault, который вызывается при возникновении исключения.

Событие Closed будет инициировано при вызове CommunicationObject.Close.

...