2014-09-23 3 views
1

Я разрабатываю приложение, которое использует стороннее веб-сервис .asmx. И я использую PCL (Portable Class Libraries) в своем приложении.Потребление asmx webservice в pcl

Так что я хотел потреблять те веб-сервисы в своем приложении. Проблема в том, что PCL не поддерживает традиционный веб-сервис, а именно: .asmx. Он поддерживает WCF веб-сервисы.

Я прочитал много статей, они предлагают мне, что от wsdl напишите WCF веб-сервис. Но поскольку все веб-сервисы являются сторонними, мне нужно написать прокси-сервер в клиентском приложении (там, где вызывается веб-сервис), чтобы он конвертировал WCF звонок в .asmx.

Также я пробовал этот пример с использованием PCL. Я использую this ASMX веб-сервис

public class PerformLogIn : ILogInService 
    { 
     public string LogIn(string code) 
     { 
      ServiceReference1.WeatherSoapClient obj = new ServiceReference1.WeatherSoapClient(); 
      obj.GetCityForecastByZIPAsync(code); 
      ServiceReference1.WeatherReturn get = new ServiceReference1.WeatherReturn(); 

      return (get.Temperature); 
     } 

Но я не получаю никакого результата. У кого-нибудь есть идея, как это сделать?

+0

Вам не нужно преобразовывать. Просто используйте «Добавить ссылку на службу», как обычно. –

+0

@JohnSaunders: Thnx для ответа .. Я сделал это ... Он дает мне методы «asych». Чей тип возврата является 'void'. Итак, как получить ответ на обслуживание? – Rohit

ответ

1

Eureka Я нашел ..

Используйте следующий фрагмент кода

public class PerformLogIn : ILogInService 
    { 
     public void LogIn(string code) 
     { 
      ServiceReference1.WeatherSoapClient obj = new ServiceReference1.WeatherSoapClient(
             new BasicHttpBinding(), 
             new EndpointAddress("http://wsf.cdyne.com/WeatherWS/Weather.asmx")); 

      obj.GetCityForecastByZIPAsync(code); 
      obj.GetCityForecastByZIPCompleted+=getResult; 
     } 
     void getResult(Object sender,GetCityForecastByZIPCompletedEventArgs e) 
     { 
      string error = null; 

      if (e.Error != null) 
       error = e.Error.Message; 
      else if (e.Cancelled) 
       error = "cancelled"; 
      var result = e.Result; 
     } 
    } 

Таким образом, ваш ответ от веб-сервиса хранится в result переменной. Просто извлеките данные независимо от них и верните их вызывающему клиенту.

+0

Привет Rohit. Я пытаюсь реализовать что-то подобное этому, но у меня проблема. В промежутке между вызовом функции void и завершенным запуском события появляется ошибка с ошибкой null. Здесь вы можете увидеть более подробную информацию, https://stackoverflow.com/questions/38708785/using-asmx-in-portable-library. Любой совет? –

Смежные вопросы