为了避免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;
}}
答案 0 :(得分:0)
在客户端代码中生成绑定时,将自动创建所有必需的复杂数据类型,因为它们在服务的元数据中描述。但是,您现在应该使用WCF,因为没有必要使用老式的.NET 2.0 Web服务(即WebService
类)。
答案 1 :(得分:0)
您将很难编译这个,因为您在公共方法中公开了一个私有结构。至少,结构必须公开。我还建议你把你的结构放在类之外,因为内部类/结构/等是不好的做法(这是我的个人意见,但你没有看到它们在例如.net框架中使用得太多,表明微软没有'他们也很喜欢他们。
请记住,Web服务本质上是分布式的,因此您不必直接依赖对该类的引用。这是一个SOAP服务(我认为),框架将公开服务的元数据。 Visual Studio可以使用此元数据自动生成可用于调用服务的代理客户端。
以下是设置代理的简单方法:
最后我同意Ondrej Tucny的观点,你应该研究一下WCF