System.Reflection.Emit для реализации WebChannelFactory для Silverlight 4? - PullRequest
0 голосов
/ 05 июня 2011

Этот вопрос следует за чужим вопросом, потому что спрашивающий никогда не принимал и не говорил о решении своей проблемы, если он его нашел.

Какой самый портативный способ сделать Silverlight & Regular .NETREST клиент

Если вы знакомы с WebChannelFactory из .NET, он предоставляет чистый способ создания клиента для доступа к WCF Web Http (REST) ​​сервисам.В Silverlight 4 такого класса нет, поэтому, возможно, стоит создать класс, который будет действовать так же, как он.

Как бы вы начали создавать такой класс, который создает клиента, реализующего контракт вашей службы ( TChannel )?Я не знаю, как Microsoft сделала это, но похоже, что они каким-то образом создают новый Тип во время выполнения для реализации интерфейса.Ты подойдешь к этому в Silverilght?Может быть, глядя на System.Reflection.Emit и TypeBuilder.AddInterfaceImplementation ?

У меня есть более конкретный вопрос к System.Reflection.Emit: как проще всего использовать MethodBuilder для создания метода для TypeBuilder, если вы хотите использовать существующий скомпилированный код?Похоже, вы могли бы использовать MethodBuilder.CreateMethodBody , однако в Silverlight 4 этого не существует.

Ответы [ 2 ]

2 голосов
/ 05 июня 2011

Прежде всего WebChannelFactory - это не чистый способ создания REST-клиента - это полностью без REST-подход, потому что он требует, чтобы вы разделили все контракты между сервисом и клиентом.WebChannelFactory существует, чтобы обеспечить совместимость со стандартными клиентами служб WCF и каким-то образом (ошибочно) упростить вызов служб REST, написанных на .NET.Это также ответ, как MS это сделала - нет создания типа во время выполнения.Типы определяются во время разработки.

0 голосов
/ 12 июня 2011

Хорошая статья. Я решил создать класс, который упрощает вызов служб REST WCF и более точно отвечает моим потребностям. Может быть, другие найдут это полезным.

WebHttpClient

...