WCF 客户端:传递枚举值始终为 0

本文关键字:枚举 客户端 WCF | 更新日期: 2023-09-27 17:56:14

我在服务中编写了以下代码。

[DataContract]
public class Email
{
    private string senderEmail;
    private MyEmailType emailType;
    [DataMember]
    public string SenderEmail { get { return senderEmail; } set { senderEmail = value; } }
    [DataMember]
    public MyEmailType EmailType { get { return emailType; } set { emailType = value; } }
}
[DataContract]
public enum MyEmailType
{
    [EnumMember]
    EmailType1 = 1,
    [EnumMember]
    EmailType2= 2
}

我像这样将电子邮件对象发送到服务:

Email email = new Email();
email.SenderEmail = "someemail@mail.com";
email.EmailType = MyEmailType.EmailType1;
bool isDispatchSuccessful = myClientObject.SendMassProcessEmail(email);

当我到达服务时,SenderEmail 属性的值是正确的,但 EmailType(枚举)得到 0,而不是 1(EmailType1)。

为什么会这样?

编辑:

我尝试将 MyEmailType 变量除了 Email 对象之外传递给 SendMassProcessEmail,如下所示:

bool isDispatchSuccessful = myClientObject.SendMassProcessEmail(email, MyEmailType.EmailType1);

现在,独立的枚举变量接收正确的值,但作为 Email 类的公共成员的枚举变量仍获得值 0。

WCF 客户端:传递枚举值始终为 0

要回答这个问题,请参考此链接 http://msdn.microsoft.com/en-us/library/aa347875(v=vs.110).aspx

如果你真的想传递实际值,我认为你应该这样做:

[DataContract]
public enum MyEmailType
{
    [EnumMember(Value = 1)]
    EmailType1 = 1,
    [EnumMember(Value = 2)]
    EmailType2= 2
}

您必须将 [DataContract] 添加到支持字段:

[DataContract]
public class Email
{
    [DataMember]
    private string senderEmail;
    [DataMember]
    private MyEmailType emailType;
    public string SenderEmail { get { return senderEmail; } set { senderEmail = value; } }
    public MyEmailType EmailType { get { return emailType; } set { emailType = value; } }
}

我遇到了同样的麻烦,但就我而言,这是参数名称中的错误。

[ServiceContract]
public interface ISendMail
{
    /// <summary />
    /// <param name="emailType">This parameter should be 'myEmailType'</param>
    [OperationContract]
    void Send(string senderEmail, MyEmailType emailType);
}

就我而言,第二个参数是服务器端的myEmailType,但是,当我在客户端创建接口时,我忘记了"my"。一个愚蠢的错误,可以为这个问题带来一些启发。