簡體   English   中英

ASP.NET Web服務

[英]ASP.NET Webservice

我可能會從錯誤的方向做這件事。 我對.net Web服務還很陌生,正在尋求一點幫助。

我有一個在線上的地理位置網絡服務,我想將結果綁定到列表框或數據視圖,但是也無法。

我創建了一個名為net.webservicex.www的Web代理,該代理指向以下位置的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";

        }
    }
}

我收到的錯誤是錯誤

第24行無法將類型'web_services.net.webservicex.www.GeoIP'隱式轉換為'string'

如果有人可以給我一些提示或想法,那將很棒。

謝謝! 保羅

您不需要將其放在結果字符串中

 
 
 
  
  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;

查看此Web服務的wsdl,似乎對GetGeoIP方法的調用返回一個對象,而不是字符串。

這就是編譯器抱怨的原因。 您可以將結果類型更改為期望的對象,也可以使用var關鍵字。

這條線是錯誤的:

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不同,您也許可以將其作為數據源。

我是C#和.net的初學者,但是這是我解決此問題的方法,我相信它會對像我這樣的初學者有所幫助:

結果對象如下所示:

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

所以很明顯(是的,對……吐血之后……大聲笑),結果不可能是簡單的STRING類型。 因此,從上述解決方案中抽取樣本,我做到了:

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 ”是我的Web服務名稱(而不是“ 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>

就是這樣-我希望我對像我這樣的初學者有所幫助:)

    GeoIP result;

    ipAddress = "196.36.153.129";

    result = myProxy.GetGeoIP("64.106.166.130");

 [WebMethod] public double ProcitajKursNaDan(DateTime datum, string valuta) { List<string> podaci = GetLines("valute.txt"); double kurs = 0.0; for (int i = 0; i < podaci.Count; i++) { string[] linija = podaci[i].Split('|'); string dat = linija[0]; string val = linija[1]; string vrednost = linija[2]; dat = dat.Trim(); val = val.Trim(); vrednost = vrednost.Trim(); DateTime datIzFajla = DateTime.ParseExact(dat, "d/M/yyyy", null); double kursIzFajla = Convert.ToDouble(vrednost); if (DateTime.Compare(datIzFajla, datum) == 0 && val == valuta) kurs = kursIzFajla; } return kurs; } [WebMethod] public bool UpisiKursNaDan(DateTime datum, string valuta, double Kurs) { string date = datum.ToString("d/M/yyyy"); string linijaZaUpis = date + " | " + valuta + " | " + Kurs.ToString(); bool success = false; try { StreamWriter sw = new StreamWriter(Server.MapPath("podaci/valute.txt"), true); sw.WriteLine(linijaZaUpis); sw.Close(); success = true; } catch { success = false; } return success; } [WebMethod] public List<string> ProcitajSveValute() { List<string> linije = GetLines("valute.txt"); List<string> ValuteIzFajla = new List<string>(); for (int i = 0; i < linije.Count; i++) { string linija = linije[i]; string valuta = linija.Split('|')[1]; valuta = valuta.Trim(); ValuteIzFajla.Add(valuta); } List<string> ValuteKraj = ValuteIzFajla.Distinct().ToList(); return ValuteKraj; // try // { // if (!IsPostBack) // { // Service1 servis = new Service1(); // List<string> lista = servis.ProcitajSveValute().ToList<string>(); // for (int i = 0; i < lista.Count(); i++) // { // DropDownList1.Items.Add(lista[i]); // } // } // } // catch (Exception ex) // { // Response.Write(ex.Message); // } // } // protected void Button1_Click(object sender, EventArgs e) // { // try // { // Service1 servis = new Service1(); // DateTime datum = Calendar1.SelectedDate; // string valuta = DropDownList1.SelectedItem.ToString(); // double kurs = Convert.ToDouble(TextBox1.Text); // bool nesto = servis.UpisiKursNaDan(datum, valuta, kurs); // } // catch (Exception ex) // { // Response.Write(ex.Message); // } // TextBox1.Text = " "; } } } // try // { // if (!IsPostBack) // { // Service1 servis = new Service1(); // List<string> lista = servis.ProcitajSveValute().ToList<string>(); // for (int i = 0; i < lista.Count(); i++) // { // DropDownList1.Items.Add(lista[i]); // } // } // } // catch (Exception ex) // { // Response.Write(ex.Message); // } //} //protected void Button1_Click(object sender, EventArgs e) //{ // try // { // Service1 servis = new Service1(); // DateTime datum = Calendar1.SelectedDate; // string valuta = DropDownList1.SelectedItem.ToString(); // double kurs = servis.ProcitajKursNaDan(datum, valuta); // Label1.Text = kurs.ToString(); // if (kurs == 0) // { // Label1.Text = "Ne postoji kursna lista za tu valutu na taj datum!"; // } // } // catch (Exception ex) // { // Response.Write(ex.Message); // } //} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM