gpt4 book ai didi

c# - 如何从 web 服务返回多个值?

转载 作者:可可西里 更新时间:2023-11-01 07:50:19 24 4
gpt4 key购买 nike

我是网络服务领域的新手,所以请多多包涵。我正在使用 .asmx 文件在 Visual Studio 2010 中创建一个非常简单的 Web 服务。

这是我使用的代码:

namespace MyWebService
{
[WebService(Namespace = "http://www.somedomain.com/webservices")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string simpleMethod(String str)
{
return "Hello " + str;
}
}
}

当我调用它并为它返回的 str 参数输入值“John Smith”时:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.somedomain.com/webservices">Hello John Smith</string>

我的问题是,为 Web 服务方法返回超过 1 个值的最佳做法是什么?如果值都是相同的数据类型,我应该使用数组吗?如果值包含不同的数据类型,我是否需要创建自定义类?

最佳答案

我相信最好的设计是编写一个类并将其包含在您的 WSDL 中。这将使类签名与您的服务描述一起可用。这意味着无论使用何种语言,客户端都能够使用该类型的对象。

创建此类时,尽量不要使用 .Net 内置的自定义类型,例如 DataSet 或任何其他类型。尽可能尝试始终使用基本类型。这将确保您的对象将很容易序列化和反序列化,以及由 .Net 以外的客户开发的框架使用。

请检查这个问题:How to Declare Complex Nested C# Type for Web Service它确实显示了一些代码和一些小建议。

如果您需要任何进一步的支持,请告诉我。


更新

假设您要为给定的网络方法返回以下数据集:

  • 学生姓名
  • 学生的生日
  • 学生当前分配到的类(class)列表(以他们的名字表示)

查看服务的签名方式:

public class WebService1 : System.Web.Services.WebService
{
public class Course
{
public string Name { get; set; }
}

public class Student
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public List<Course> CurrentCourses { get; set; }
}

[WebMethod]
public Student HelloWorld()
{
Student Baxter = new Student();

Baxter.Name = "Baxter";
Baxter.BirthDate = new DateTime(1986, 04, 22);
Baxter.CurrentCourses = new List<Course>();
Baxter.CurrentCourses.Add(new Course() { Name = "SOAP Webservices 101" });
Baxter.CurrentCourses.Add(new Course() { Name = "Mastering C#" });
Baxter.CurrentCourses.Add(new Course() { Name = "Why you (and I) suck at Javascript" });

return Baxter;
}
}

调用后结果如下:

<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<Name>Baxter</Name>
<BirthDate>1986-04-22T00:00:00</BirthDate>
<CurrentCourses>
<Course>
<Name>SOAP Webservices 101</Name>
</Course>
<Course>
<Name>Mastering C#</Name>
</Course>
<Course>
<Name>Why you (and I) suck at Javascript</Name>
</Course>
</CurrentCourses>
</Student>

最好的是,因为此类签名是公开的(包含在 WSDL 中),您可以通过简单地处理 WSDL 来在不同的项目执行以下操作:

        ServiceReference1.WebService1SoapClient SoapClient = new ServiceReference1.WebService1SoapClient();
ServiceReference1.Student IsThisBaxter = SoapClient.HelloWorld();

关于c# - 如何从 web 服务返回多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com