2008-09-24 67 views
1

创建Web服务以指定要使用的类型时有没有办法?具体来说,我希望能够在客户端和服务器上使用相同的类型以减少代码的重复。.NET SOAP常见类型

在简化的例子:

public class Name 
    { 
     public string FirstName {get; set;} 
     public string Surname { get; set; } 

     public override string ToString() 
     { 
      return string.Concat(FirstName, " ", Surname); 
     } 
    } 

我不希望有功能的重新编码块在我的课。另一件事情是任何存在的操作这个类的代码都不会工作在客户端,因为生成的客户端类是不同的类型。

+0

您的意思是指定Web服务方法的返回类型,还是在客户端和服务器上使用相同的类? – MusiGenesis 2008-09-24 14:18:00

回答

2

好的,我知道这是SOAP的一个明确的设计决定,所以你实际上不应该这样做。我发现下面page解释了为什么:

服务共享模式和契约, 不类。服务仅通过 通过 模式和通过 合同的行为来表达其结构。该服务的合同 描述了消息的结构 和对消息的排序约束。表达式的形式允许传入消息的机器验证 。机器 验证传入消息 允许您保护服务的完整性 。合同和模式必须随着时间的推移保持稳定,因此灵活建设 非常重要。

如此说来还有其他两种可能性:

  1. 生成在Visual Studio或使用Wsdl.exe用的网页的引用。然后进入生成的Reference.cs(或.vb)文件并显式删除类型。然后重定向到您想要位于另一个程序集中的类型。
  2. 您可以通过wsdl.exe和/ sharetypes参数在客户端的Web服务之间共享类型。
0

如果您希望您的Web服务和客户端之间共享的类型或结构,公共结构添加到您的Web服务项目,像这样:

public struct Whatever 
{ 
    public string A; 
    public int B; 
} 

然后添加一个方法到您的Web服务,具有这种结构作为它的返回类型:

[WebMethod] 
public Whatever GiveMeWhatever() 
{ 
    Whatever what = new Whatever(); 
    what.A = "A"; 
    what.B = 42; 
    return what; 
} 

在更新您的客户端的Web引用,你就可以创建类型的结构无论您的客户端应用程序,像这样:

Webreference.Whatever what = new Webreference.Whatever(); 
what.A = "that works?"; 
what.B = -1; // FILENOTFOUND 

该技术可让您维护需要在一个位置来回传递的任何结构(Web服务项目)的定义。