我有一个解决方案,其中包含一个WCF项目和一个Project for Data Classes,每个类都属于“DT”类。每个DT类都标记为DataContract(),每个属性标记为DataMember()。WCF DataContract类未在客户端应用程序中定义
[DataContract()]
public class AttachmentDT : IAttachment
{
private System.Int32 mAttachmentID;
[DataMember()]
public System.Int32 AttachmentID
{
get { return mAttachmentID; }
set { mAttachmentID = value; }
}
private System.DateTime mCreateDate;
[DataMember()]
public System.DateTime CreateDate
{
get { return mCreateDate; }
set { mCreateDate = value; }
}
private System.Byte[] mFileBytes;
[DataMember()]
public System.Byte[] FileBytes
{
get { return mFileBytes; }
set { mFileBytes = value; }
}
private System.String mFileName;
[DataMember()]
public string FileName
{
get { return mFileName; }
set { mFileName = value; }
}
}
我的WCF项目有一个对数据类项目的类引用,所以我有权访问这些类。如果我没有在WCF界面中使用它们中的任何一个,那么使用WCF的客户端应用程序也不能看到数据类。为什么是这样?我必须认真地为每个我希望客户端看到的数据类创建一个空方法吗?例如,在我的WCF接口,我创建了一个无用的方法...
[OperationContract()]
void AttachmentDT(AttachmentDT a) { }
如果我有我想给可视性太20个数据类,我必须做的每一个这个愚蠢的废话?请告诉我有一个不那么无知的方式来获得这些DT类的可见性。
当我添加到我的客户端应用程序的WCF引用。我没有选中重用类型框,因为我也碰到了被检查的主要问题。我基本上已经创建了一个“基础”web服务,供多个应用程序使用。每个应用程序只需要某些服务本身,但WCF中的Data类需要对每个应用程序都可见。这可以防止大量代码的重复。在DataContract上使用Serializable属性可以达到这个目的吗? – user1732364 2014-09-18 17:30:39
你不应该明确地将它标记为Serializable。您是否尝试通过KnownType/ServiceKnownType属性公开它?另外,IAttachment界面的可见性是什么? – TGOK 2014-09-19 14:28:33