Что может вас удивить, так это то, что вызовы веб-служб в Silverlight должны обрабатываться асинхронно.
Когда вы определяете WebMethod, скажем, например, у вас есть один с именем DoWork в классе с именем WorkMan. Ваш код в Silverlight будет выглядеть так:
WorkManSoapClient client = new WorkManSoapClient();
client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(this.DoWorkCompleteHandler); // where DoWorkCompletedHandler handles the callback.
Затем вы вызываете ваш фактический метод и позволяете обратному вызову обработать результат.
client.DoWorkAsync();
Если ваш веб-метод возвращает значение, ваш объект EventArg будет иметь свойство Result, которое вы можете использовать для получения результата.
Последнее замечание: личная стилистическая вещь, но мне нравятся лямбда-выражения, а не генерация совершенно нового метода для обратного вызова. Я мог бы написать что-то вроде следующего:
WorkManSoapClient client = new WorkManSoapClient();
client.DoWorkCompleted += (s,e) => {
if(e.Result != null){
object foo = e.Result;
}
};
client.DoWorkAsync();