Когда вы добавляете веб-ссылку, генератор кода автоматически добавляет методы «Async» для доступа к веб-службе.
Я бы рекомендовал использовать асинхронные методы, а не синхронные. Приятно то, что EventArgs для методов Async предоставляют свойство Error
, которое вы можете использовать, чтобы увидеть, был ли запрос успешным или нет.
private void CheckWebservice(string data)
{
WebService.Server server = new WebService.server();
server.methodCompleted += server_methodCompleted;
server.methodAsync(data);
}
private void server_methodCompleted(object sender, methodCompletedEventArgs e)
{
if (e.Error != null)
if (MessageBox.Show("Error", "Error", MessageBoxButtons.AbortRetryIgore) == DialogResult.Retry)
{
// call method to retry
}
else
{
if (e.Result == "OK") { // Great! }
}
}
Если вам по какой-то причине необходимо использовать синхронные методы, то вы, конечно, могли бы написать класс для инкапсуляции методов для вызова вашего веб-сервиса, чтобы вы могли вызывать его из разных мест без дублирования кода. Ваш класс инкапсуляции может выполнить всю обработку ошибок и вернуть результат.
class CallWebService
{
public enum Result
{ Unknown, Success, NotAvailable, InvalidData } // etc
public Call(string data)
{
Webservice.Server server = new Webservice.Server();
string result = string.Empty;
try
{
result = server.getResult(data);
}
catch (Exception ex) // replace with appropriate exception class
{
return Result.NotAvailable;
}
if (result == "OK") return Result.Success
else return Result.InvalidData;
}
}