我的Web服务返回一个结构,后面的代码将如何知道它是什么?

时间:2013-08-28 20:25:12

标签: asp.net web-services

为了避免Web服务无法传递字典和树等复杂对象的问题,我在类中创建了一个带有一些值字段的小结构。但是,Web服务是解决方案中的单独项目,我不确定调用webService函数的后台代码将如何知道结构是什么。我应该将结构复制到后面的代码文件吗?我可以导入吗?

这是一个小例子:

namespace mYWebService{

 [WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class Service1 : System.Web.Services.WebService
{
  struct TreeData
    {
    private readonly string text;
    private readonly string parent;
    private string val;

    public TreeData (string Text, string Parent)
    {
        this.text = Text;
        this.parent = Parent;
        this.val = "";
    }

         public TreeData (string Text, string Parent, string Value)
    {
        this.text = Text;
        this.parent = Parent;
        this.val = Value;
    }


    public string Text { get { return text; } }
    public string Parent { get { return parent; } }
    public string Value { get { return val; } }

}


[WebMethod]`
 public TreeData getTree(){
      TreeData myTree = new TreeData("1","2","3");
       return myTree;
 }}

2 个答案:

答案 0 :(得分:0)

在客户端代码中生成绑定时,将自动创建所有必需的复杂数据类型,因为它们在服务的元数据中描述。但是,您现在应该使用WCF,因为没有必要使用老式的.NET 2.0 Web服务(即WebService类)。

答案 1 :(得分:0)

您将很难编译这个,因为您在公共方法中公开了一个私有结构。至少,结构必须公开。我还建议你把你的结构放在类之外,因为内部类/结构/等是不好的做法(这是我的个人意见,但你没有看到它们在例如.net框架中使用得太多,表明微软没有'他们也很喜欢他们。

请记住,Web服务本质上是分布式的,因此您不必直接依赖对该类的引用。这是一个SOAP服务(我认为),框架将公开服务的元数据。 Visual Studio可以使用此元数据自动生成可用于调用服务的代理客户端。

以下是设置代理的简单方法:

  1. 启动Web服务项目可执行文件(不是在调试模式下,您仍然需要能够使用Visual Studio进行后续步骤)
  2. 选择您的网络服务客户端(调用该服务的代码)所在的项目,并添加服务参考
  3. 这将打开一个对话框,您可以在其中输入服务端点(url)。输入运行服务的端点,您应该可以在此对话框中选择
  4. 添加引用后,应为您生成一些自动生成的代理代码。这将使您可以访问您的方法。
  5. 最后我同意Ondrej Tucny的观点,你应该研究一下WCF