【问题标题】:calling methods from an ASMX web service -error-从 ASMX Web 服务调用方法 -error-
【发布时间】:2013-04-04 11:44:31
【问题描述】:

我正在尝试编写一个应用程序(简单形式),它将使用(调用)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 服务时命名的命名空间

【问题讨论】:

    标签: c# web-services service web asmx


    【解决方案1】:

    您的代码将无法编译,因为 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(); 
        }
    

    【讨论】:

      【解决方案2】:

      首先在服务方法中你需要定义响应格式数据必须是XML格式。然后在客户端使用'XmlNode' 从服务中获取数据。 I think this post will be usefull for you

      【讨论】:

        【解决方案3】:

        您的错误是认为您将恢复 XML。你不。您将收到 MyService.Customer 回复。

        仅供参考,您应该使用“添加服务引用”来使用 .asmx 服务。

        【讨论】:

        • 因此,即使我自己运行 Web 服务,它也不会以 xml 布局显示它,但我不会恢复 XML 布局? p.s.:我确实通过添加服务参考 -> 高级 -> 添加 Web 参考来使用 .asmx 服务
        • 什么是“XML 布局”?我想如果你真的想要 XML,出于某种原因,你可以将 MyService.Customer 序列化回 XML。大多数人很高兴得到一个类实例而不是一个 XML 块。
        猜你喜欢
        • 2013-03-27
        • 2013-08-24
        • 1970-01-01
        • 2020-06-28
        • 2014-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        相关资源
        最近更新 更多