Использование классов Webservice в Silverlight при добавлении ссылки на сервис вместо веб-ссылки
-
05-07-2019 - |
Вопрос
Сценарий:
Я использую Silverlight 3.0 в качестве клиента для веб-сервиса.
Дизайн:
На сервере есть класс с именем Информационный сервис устройств который обладает базовой функциональностью получения списка устройств, получения свойств устройств и т.д.
Когда я открываю проект ASP.NET и пытаюсь добавить веб-ссылку, я могу найти опцию добавления "Веб-ссылки".После того, как я добавлю веб-ссылку таким образом, я смогу получить доступ к классу DeviceInfoService, создав его объект, а затем обратившись к его методам.
Веб-справочник v/s Service Reference:
Приезжаю в Сильверлайт:когда я пытаюсь добавить ссылку на службу, нет возможности добавить веб-ссылку.Перейдя по ссылке на сервис, все работает нормально до тех пор, пока не будет загружен файл WSDL.Люди говорят, что я могу получить эту опцию, вернувшись к .NET 2.0, но, вероятно, Silverlight не будет работать в .NET 2.0
В чем проблема
Теперь, когда я пытаюсь получить доступ к классу DeviceInfoService , я не могу его найти.Все, что я получаю, это интерфейсы - DeviceInfoServiceSoap и DeviceInfoServiceSoapChannel.Классы с именами DeviceInfoServiceSoapClient.
Методы GetHostedDevices и GetDeviceInfo больше недоступны.Все, что я получаю, это GetDeviceInfoRequest, GetDeviceInfoRequestBody, GetDeviceInfoResponse и GetDeviceInfoResponseBody.
Я много гуглил, как использовать эти четыре класса, но ничего не нашел.Я хочу получить эти 2 класса напрямую, как в ASP.NET, и не использовать этот тип ответа на запрос.
Решение
Что такое веб-ссылка в ASP.NET эквивалентно ссылке на сервис в Silverlight.
Вот пример того, как использовать веб-сервис в Silverlight, напримертот самый Фильтр Ненормативной лексики CDYNE.
Добавьте новую ссылку на сервис в свой проект, URL-адрес: http://ws.cdyne.com/ProfanityWS/Profanity.asmx?wsdl, оставьте имя как ServiceReference1.
Используйте этот код для вызова службы (которая была реализована как асинхронная).:
public MainPage()
{
InitializeComponent();
string badText = "I wonder if the filter will filter this out: shit bad luck";
ServiceReference1.ProfanitySoapClient client = new ServiceReference1.ProfanitySoapClient();
client.ProfanityFilterCompleted += new EventHandler<ServiceReference1.ProfanityFilterCompletedEventArgs>(client_ProfanityFilterCompleted);
client.ProfanityFilterAsync(badText, 0, false);
}
void client_ProfanityFilterCompleted(object sender, ServiceReference1.ProfanityFilterCompletedEventArgs e)
{
string cleanText = e.Result.CleanText; // Web service callback is here
}
И у вас есть веб-сервис, запущенный в Silverlight!
Другие советы
Похоже, вы ужасно путаетесь в некоторых понятиях.
Как насчет того, чтобы посмотреть следующее видео Silverlight.Net и посмотреть, поможет ли это?Как использовать WCF и ASP.NET Веб-сервисы в Silverlight