2011-04-15 56 views
1

我可能会从这个错误的方向去做。我对.net Web服务相当陌生,并且正在寻找一些帮助。ASP.NET Webservice

我有一个地理定位web服务,我上网了,我想将结果绑定到列表框或数据视图,但我也无法。

我已经创建了一个Web代理名为net.webservicex.www指向在Web服务.. http://www.webservicex.net/geoipservice.asmx

这里是我的C#代码。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace web_services 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      net.webservicex.www.GeoIPService myProxy = new net.webservicex.www.GeoIPService(); // proxy object 
      string ipAddress, result; 

      ipAddress = txtIpAddress.Text; 

      result = myProxy.GetGeoIP("64.106.166.130"); 
      lstResults.DataSource = result; 
      lstResults.DataMember = "IP"; 

     } 
    } 
} 

我recieving的错误是错误

无法隐式转换类型“web_services.net.webservicex.www.GeoIP”到“串”在行24

如果有人能够给我一些提示或想法会很棒。

谢谢! 保罗

+0

什么的GeoIP的类型是什么样子?很明显,你不能将其转换为字符串。 – 2011-04-15 14:07:43

回答

4

你不需要把它在结果字符串

lstResults.DataSource = myProxy.GetGeoIP("64.106.166.130"); 

因为你的web服务返回的对象是不可枚举的,你可以通过将其诱骗到一个枚举类型:

List<web_services.net.webservicex.www.GeoIP> resultList = new List<web_services.net.webservicex.www.GeoIP>(); 
resultList.Add(myProxy.GetGeoIP("64.106.166.130")); 
lstResults.DataSource = resultList; 
+0

当我这样做,我得到的错误信息。 “数据源是一个无效的类型,它必须是一个IListSource,IEnumerable的,或的IDataSource”。 – Paul 2011-04-15 14:15:50

2

纵观WSDL它似乎这个Web服务对GetGeoIP方法的调用返回一个对象,而不是一个字符串。

这就是编译器抱怨的原因。您可以将结果的类型更改为它所期望的对象或使用var关键字。

2

此行有过错:

result = myProxy.GetGeoIP("64.106.166.130"); 

由该方法返回的对象不是一个字符串,它是一个web_services.net.webservicex.www.GeoIP

您已将result声明为不匹配的字符串。也许GeoIP类有ToString()方法。如果是这样,你可以更改您的代码:

string ipAddress; 
web_services.net.webservicex.www.GeoIP result; 
// or maybe: object result; 

ipAddress = txtIpAddress.Text; 

result = myProxy.GetGeoIP("64.106.166.130"); 

而且取决于什么result样子,你可能只是能够让您的数据源。

1
GeoIP result; 

    ipAddress = "196.36.153.129"; 

    result = myProxy.GetGeoIP("64.106.166.130"); 
2

我是一个非常初学者用C#和.NET,但这里是我是如何解决这一点,我相信它会帮助初学者和我一样:

结果对象看起来是这样的:

<GeoIP><ReturnCode>1</ReturnCode><IP>11.22.33.44</IP><ReturnCodeDetails>Success</ReturnCodeDetails><CountryName>Germany</CountryName><CountryCode>GER</CountryCode></GeoIP> 

所以,很显然(对,没错......这一吐血...笑后),结果不能是一个简单的字符串类型。 因此,采取样品从我做它像上面的解决方案:

Default.aspx.cs:

 mygeoip.GeoIPService getIP = new mygeoip.GeoIPService(); 
     string myIP = IPTextBox.Text; 
     GeoIPService.mygeoip.GeoIP resultList = new GeoIPService.mygeoip.GeoIP(); 

     resultList = getIP.GetGeoIP(myIP); 
     sCountry.Text = resultList.CountryName; 
     sCountryCode.Text = resultList.CountryCode; 
     sIP.Text = resultList.IP;    

在哪里 - “mygeoip” 是我的WebService的名字(而非“net.webservicex.www”) 和GeoIPService是我的命名空间。

的Default.aspx:

 <asp:TextBox ID="IPTextBox" runat="server"></asp:TextBox>&nbsp;<asp:Button 
     ID="GetWhois" runat="server" Text="Get Whois" onclick="GetWhois_Click" /> 
<p><asp:Label ID="sCountry" runat="server" Text="Country: "></asp:Label></p> 
<p><asp:Label ID="sCountryCode" runat="server" Text="Country: "></asp:Label></p> 
<p><asp:Label ID="sIP" runat="server" Text="Country: "></asp:Label></p> 

这就是它 - 我希望我帮助初学者和我一样:)