/ / WCF: Chyba časového limitu - c #, .net, wcf, .net-3.5

WCF: Chyba časového limitu - c #, .net, wcf, .net-3.5

Mám kus kódu, ktorý zavolá službu WCF, ktorá je hosťovaná na serveri.

Kód sa stále opakuje a opakuje volanie tejto metódy znova a znova. (Požiada o "stav", takže vôbec nepracuje).

To je pokuta okrem toho, že po krátkom čase som dostal chybu:
Táto operácia žiadosti odoslaná do net.tcp: // serverName: 9001 / service1 nedostala odpoveď v rámci nakonfigurovaného časového limitu (00: 00: 09.9843754)

A zrazu sa na server nemôžem dostaťEVER. Zvýšil som časový limit na 1min, ale napriek tomu som stále rovnaký problém. Všimnite si, že program, ktorý je hostiteľom služby, nerobí nič iné, stačí ponúknuť jej "status" .Takže to nie je problém, pretože aplikácia služby WCF je zaneprázdnená.

Myslím, že je to problém s kódom volajúcimslužba, pretože keď som znovu spustiť aplikáciu sa môže pripojiť k službe v poriadku ... až po ďalšom krátkom čase dostanem chybu timeout znova. Z tohto dôvodu nemám ani sieťovú chybu, pretože keď reštartujem aplikáciu, je to po určitú dobu v poriadku.

Tu je kód, ktorý som použil na zavolanie služby. Musím zlikvidovať kanál ChannelFactory po každom hovore na jeho vyčistenie alebo čo robím worng?

        NetTcpBinding binding = new NetTcpBinding(SecurityMode.Message);
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;

EndpointAddress endPoint = new EndpointAddress(new Uri(clientPath));

ChannelFactory<IClient> channel = new ChannelFactory<IClient>(binding, endPoint);
channel.Faulted += new EventHandler(channel_Faulted);
IClient client = channel.CreateChannel();

((IContextChannel)client).OperationTimeout = new TimeSpan(0, 0, 10);
ClientStatus clientStatus = client.GetStatus();

odpovede:

0 pre odpoveď č. 1

Po dokončení volania funkcie GetStatus je potrebné ukončiť klientske pripojenia. Najlepším spôsobom, ako to urobiť, je použiť blok používania. Ale môžete tiež urobiť niečo takéto po volaní client.GetStatus ()

ClientStatus clientStatus = client.GetStatus();

try
{
if (client.State != System.ServiceModel.CommunicationState.Faulted)
{
client.Close();
}
}
catch (Exception ex)
{
client.Abort();
}