Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 我的web服务返回一个结构,后台代码如何知道它是什么?_Asp.net_Web Services - Fatal编程技术网

Asp.net 我的web服务返回一个结构,后台代码如何知道它是什么?

Asp.net 我的web服务返回一个结构,后台代码如何知道它是什么?,asp.net,web-services,Asp.net,Web Services,为了避免web服务无法传递复杂对象(如字典和树)的问题,我在类中创建了一个带有几个值字段的小结构。然而,web服务在解决方案中处于一个单独的项目中,我不确定调用web服务函数的后台代码如何知道结构是什么。我应该将结构复制到后台代码文件中吗?我可以进口吗 下面是一个小例子: namespace mYWebService{ [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProf

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

下面是一个小例子:

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;
 }}

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

您将很难编译此版本,因为您将在公共方法中公开私有结构。至少,结构必须公开。我还建议您将结构放在类之外,因为内部类/structs/etc是一种不好的做法(这是我个人的观点,但是您没有看到它们在.net framework中被大量使用,这表明Microsoft也不太喜欢它们)

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

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

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