2014-09-23 78 views
1

我正在开发一个使用第三方.asmx Web服务的应用程序。我在我的应用程序中使用PCL(便携式类库)。在pcl中使用asmx webservice

所以我想在我的应用程序中使用这些.asmx网络服务。问题是PCL不支持传统的Web服务,即.asmx。它支持WCF网络服务。

我看了很多文章,他们建议我从wsdlWCF web服务。但由于所有Web服务都是第三方,因此我需要在客户端应用程序(在调用Web服务的位置)编写代理,以便将WCF调用转换为.asmx

此外,我已经尝试使用PCL这个例子。 我使用this ASMX Web服务

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

您不必做任何转换。就像你通常那样使用“添加服务参考”。 – 2014-09-24 05:40:55

+0

@JohnSaunders:Thnx的回复..我做到了......这是给我'asych'方法。其返回类型是“空白”。那么如何得到服务的回应? – Rohit 2014-09-24 06:37:06

回答

1

尤里卡我发现它..

使用下面的代码片段

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; 
     } 
    } 

所以从Web服务你的回应被存储在result变量。只需获取所需的数据并将其返回给调用客户端即可。

+0

Hi Rohit。我试图实现类似的东西,但我有一个问题。在void函数调用和完成的事件触发之间,存在空的异常错误。你可以在这里看到更多细节,https://stackoverflow.com/questions/38708785/using-asmx-in-portable-library。有什么建议? – 2016-08-02 16:16:56