通过Web服务引用丢失了分部类
本文关键字:Web 服务 引用 通过 | 更新日期: 2023-09-27 18:29:47
我有一个Web服务项目(旧的asmx技术),其中有一个类User。这个类有一个DateTime属性,它表示这个用户的出生日期。除了这个类,我还有另一个带有分部类User的文件。在这个分部类中,我添加了一个属性"Age",它返回用户的年龄:
public partial class User
{
public DateTime Age
{
get { return DateTime.Now - this.Birthdate; }
}
}
之所以它在分部类中,是因为User类代码是从配置文件中自动生成的,每次生成代码时,如果不删除它,我就无法将代码添加到此类中。
现在,在我的Web服务中,我有一个Web方法,它从数据库中返回这些用户的列表:
[WebMethod]
public List<User> GetUsers()
{
return Database.LoadUsers();
}
很简单。。。无论如何,现在在另一个项目中,我为这个Web服务添加了一个服务引用。它为我生成了服务客户端和一个User类。问题是:这个User类不包含分部类中定义的属性(本例中为Age)。。。网络服务似乎没有得到这些信息。
当然,我可以创建一个新的部分User类,并基本上在第二个项目中重写它,但我不应该这样做,是吗?为什么Web服务不识别分部类?
选项1
将您编写的分部类添加为新项目的链接。它将是同一个文件,但链接到新项目中。当您进入添加->现有项目时,通过打开选择箭头,然后选择"添加为链接"。
选项2
创建一个扩展方法:
public static class DateExtensions
{
public TimeSpan GetAge(this DateTime birthDate)
{
return DateTime.Now - birthDate;
}
}
然后,只需为扩展类所在的任何命名空间添加一个using
语句,并确保引用了项目/程序集,就可以调用以下语句:
// This is your BirthDate property that would come back and is DateTime
var birthDate = new SomeService().DoSomething().BirthDate;
var age = birthDate.GetAge();
选项3
创建一个单独的项目,并将服务引用和分部放在其中。使用项目引用中的项目(以及必要的框架引用)。
我创建了一个示例供您在GitHub上查看/使用。
如果必须将客户端与服务紧密耦合,则可以获得服务引用以重用服务使用的相同类型。只需将有问题的类型移动到它们自己的项目和程序集,并从客户端和服务器项目中引用它们。
我犹豫的是,这适用于WCF服务,但我从未使用ASMX服务。