我是 WCF 的新手,目前我正在开发 TCP WCF 服务,我不确定我是否正确理解传递参数,所以我建议您发表评论并给出标准化的方式。
为了弄清楚我开发了一个用于测试目的的小型服务,它具有单一方法并依赖于公开单个类的外部 .Net dll。服务合同代码
[ServiceContract]
public interface IMyService
{
[OperationContract]
int Test1(actionType at, calculationType ct, action a);
[OperationContract]
int Test2(DataSeries s);
}
其中 actionType
, calculationType
,action
是在外部 dll 中声明的枚举,是在 dllDataSeries
中声明的类。
dll 中类的原始定义在其成员上DataSeries
标记为[Serializable]
only 而 no 。[DataMember]
我在客户端和服务器端使用第三个 dll,令我惊讶的是两个应用程序都可以正常工作,而无需放入[DataContract]
DataSeries 类,也无需使用任何[EnumMember]
内部枚举,[DataMember]
内部类。
那么发生了什么?
另一个实验:
从客户端删除第 3 方并按原样使用服务我发现 vs2008 生成枚举和DataSeries
类并用适当的属性标记它们?像
[System.CodeDom.Compiler.GeneratedCodeAttribute ("System.Runtime.Serialization", "3.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="actionType", Namespace="http://schemas.datacontract.org/2004/07/DBInterface")]
public enum actionType : int {
[System.Runtime.Serialization.EnumMemberAttribute()]
All = 0,
[System.Runtime.Serialization.EnumMemberAttribute()]
Buy = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
Sell = 2,
}