Лично я бы открыл FooClient
, когда мне это нужно, поэтому не в Page_Load
, а в методах, которые выполняют вызовы веб-службы. Таким образом, вы точно знаете, что с ним происходит. Я обычно придерживаюсь следующего подхода:
var client = OpenClient();
try
{
// Perform operation(s) on client.
}
finally
{
CloseClient(client);
}
Таким образом, вы уверены, что закрываете свой прокси-сервер, что бы ни случилось (если есть исключения, которые вам нужно перехватить, просто добавьте предложение catch). CloseClient
метод должен выглядеть так же, как в ответе PaulStack.
Другое преимущество, которое вы получаете, когда вы делаете это, состоит в том, что множественные вызовы не мешают друг другу. Предположим, что один из вызовов веб-службы приводит к неожиданному исключению. Клиентский канал теперь находится в неисправном состоянии и поэтому непригоден для любых других вызовов.
И в-третьих, предположим, что возникает исключение, которое вы не можете перехватить или не хотите перехватить, я не уверен, что Page_Unload
действительно вызван (и я не знаю, какой метод страницы будет вызван в этом событии ). Это также оставит соединения открытыми.