Не нужно беспокоиться о exec
и прочем, используйте тот факт, что функции python являются объектами и, таким образом, могут передаваться как аргументы
def try_or_zero(exp):
try:
return exp()
except:
return 0
И просто вызвать try_or_zero(my_awesome_func)
(без () ваш метод)
Я почти очень не хочу предложить это, но Вы чувствовали бы себя довольными перереализацией класса WebChannelFactory <T>?
От поверхностного взгляда до API Silverlight похоже, что Вы не получите много справки от Microsoft из поля. Необходимо было бы повторно реализовать класс канала и фабрику для него.
Возможно, другой способ создать канал и изолировать себя от определенного для платформы кода состоит в том, чтобы создать пользовательскую реализацию его? Конкретно то, что я имею в виду, Вы создаете еще один класс фабрики, и класс фабрики или звонит в WebChannelFactory, когда это доступно, или проходит обручи установки его для Вас.
Извините у меня нет более всестороннего предложения.:)
Если это - простой сервис REST Xml, почему бы не использовать WebClient в Silverlight для получения XML использование Linq к XML? Я знаю, что Вы сказали, что его грязное, но все это зависит от того, как Вы смотрите на него. при изменении сервисного интерфейса в любое время, Вы оказываетесь перед необходимостью обновлять свой код в нескольких местах. Это - просто способ, которым это.
Таким образом, чтобы сделать это, необходимо будет собрать данные асинхронным способом от WebClient и затем проанализировать его с LINQ к XML.
Время Heuer имеет хороший пример на его сайте: http://timheuer.com/blog/archive/2008/03/14/calling-web-services-with-silverlight-2.aspx
По существу это похоже на это:
WebClient rest = new WebClient();
rest.DownloadStringCompleted += new DownloadStringCompletedEventHandler(rest_DownloadStringCompleted);
rest.DownloadStringAsync(new Uri("http://example.org/current-status/xml"));
Затем в Вашем "rest_DownloadStringCompleted" Вы проанализировали бы строку как XML. Как так:
string data = e.Result;
string url = string.Empty;
XDocument doc = XDocument.Parse(e.Result);
var myResults = from results in doc.Descendants("myXmlElement") ... blah blah blah
Я сделал то же самое с REST Services собственной разработки от WCF и Silverlight, и это работало отлично.