【发布时间】:2010-10-23 07:38:41
【问题描述】:
我是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 中声明的枚举
DataSeries 是在 dll 中声明的类。
dll 中DataSeries 类的原始定义仅由[Serializable] 标记,其成员上没有[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,
}
【问题讨论】:
标签: c# wcf argument-passing