.NET SOAP常见类型

时间:2008-09-24 14:13:30

标签: .net soap types

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

简化示例:

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

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

我不想在我的课程中重新编写功能。另一件事是,存在操作此类的任何代码都不会在客户端工作,因为生成的客户端类将是不同的类型。

2 个答案:

答案 0 :(得分:2)

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

  

服务共享架构和合同,   不上课。服务完全互动   他们通过表达结构   模式和行为通过   合同。服务的合同   描述了消息的结构   和排序约束   消息。的形式   表达式允许机器验证   传入的消息。机   验证传入的消息   允许您保护服务   完整性。合同和模式必须   随着时间的推移保持稳定,所以建设   他们灵活地很重要。

说过还有两种可能性:

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

答案 1 :(得分: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引用后,您将能够在客户端应用程序中创建类型为Whatever的结构,如下所示:

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

此技术允许您维护在一个位置(Web服务项目)来回传递所需的任何结构的定义。