从ASMX Web服务调用方法 - 错误 -

时间:2013-04-12 04:23:26

标签: c# web-services service web asmx

我正在尝试编写一个将使用(调用)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服务时命名的命名空间

3 个答案:

答案 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服务。