我正在尝试编写一个将使用(调用)Web服务(Service1.asmx)并显示结果的应用程序(简单形式)。现在,Web服务有一个方法。这是代码:
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public Customer getCustomer(String id)
{
Customer customer = new Customer();
customer.CustomerId = id;
customer.CustomerName = "ABC Warehouse";
customer.CustomerAddress = "123 Anywhere";
customer.CustomerCity = "Pittsburgh";
customer.CustomerState = "PA";
customer.CustomerZip = 10379;
customer.CustomerContact = "Dan Smith";
customer.CustomerPhone = "2484567890";
customer.CustomerCredit = "True";
return customer;
}
}
当我从原始项目运行Web服务时,我可以在文本框Example中键入文本,然后单击调用以查看xml结果Example。现在,我在另一个项目中的简单表单有一个文本框(txt1),按钮(btn1)和标签(lbl1)。我成功添加了Web服务以及所有函数和类的传输。现在,我想要发生的是当您在文本框中键入内容时,单击“提交”,然后在标签中查看xml结果,该标签将包含文本框中的键入文本,就像我在其上运行服务一样拥有。这是我遇到麻烦的代码:
public partial class _Default : System.Web.UI.Page
{
protected void btn1_Click(object sender, EventArgs e)
{
MyService.Service1 service = new MyService.Service1();
string message = service.getCustomer(string id);
ID = txt1.Text;
lbl1.Text = message;
}
}
我哪里错了?我显然是初学者,所以所有的帮助将不胜感激。 p.s。:MyService是我在添加Web服务时命名的命名空间
答案 0 :(得分:3)
您的代码将无法编译,因为getCustomer返回Customer对象。
protected void btn1_Click(object sender, EventArgs e)
{
MyService.Service1 service = new MyService.Service1();
MyService.Customer customer= service.getCustomer(string id);
ID = customer.CustomerId;
// here you can generate XML based on customer object if you really need to do so
lbl1.Text = GetCustomerXML(customer);// implement method to get XML
}
private string GetCustomerXML( MyService.Customer customer)
{
XmlSerializer xsSubmit = new XmlSerializer(typeof(MyService.Customer));
StringWriter sw= new StringWriter();
XmlWriter writer = XmlWriter.Create(sw);
xsSubmit.Serialize(writer, customer);
return sw.ToString();
}
答案 1 :(得分:0)
首先,在服务方法中,您需要定义响应格式数据必须是XML格式。然后在客户端使用'XmlNode'
从服务中获取数据。
I think this post will be usefull for you
答案 2 :(得分:0)
您的错误是认为您将恢复XML。你不是。你将得到一个MyService.Customer
。
仅供参考,您应该使用“添加服务引用”来使用.asmx服务。