【问题标题】:WCF - IsRequired doesn't cause an exception, even when the client doesn't supply the required valueWCF - IsRequired 不会导致异常,即使客户端没有提供所需的值
【发布时间】:2021-01-02 14:02:37
【问题描述】:

我有一个简单的实体,它的一个属性是必需的:

[DataContract]
 public class Person
 {
     [DataMember]
     public string FirstName { get; set; }
                
     [DataMember (IsRequired=true)]
     public string LastName { get; set; }    
 }

这是服务的接口:

 [ServiceContract]
 public interface IService1
 {
      [OperationContract]
      Person DoubleLastName(Person person);
 }

这就是服务:

  public class Service1 : IService1
  {      
     public Person DoubleLastName (Person person)
     {
       return new Person { FirstName = person.LastName, LastName = 
                    person.LastName};
       }
  }

这里有一个问题:当客户端向这个服务发送一个对象时, 没有所需的属性,一切正常。 我不应该得到一个例外吗?

using (Service1Client myProxy = new Service1Client())
{
    Person person1 = new Person {  };   //Here I don't notify the required value.
    Person person = myProxy.DoubleLastName(person1);
}

【问题讨论】:

  • @DingPeng 相信我,如果我认为问题已解决,我会将其标记为答案。在这种情况下,您的链接对我没有帮助。
  • @Ding 在您提供的链接中,您可以看到它是在 .NET Framework 3.0 中引入的。没有看到“仅”这个词。
  • 我认为这可能是由于 .net 3.0 之后进行的一些优化没有引发此异常。如果我们自己序列化和反序列化 Person 对象,仍然会抛出异常。

标签: wcf proxy attributes isrequired


【解决方案1】:

这是因为 DataMemberAttribute.IsRequired 适用于 .NET Framework 3.0:

有关它的更多信息,您可以参考这个link

我尝试使用.NET Framework3.0进行测试,出现异常:

【讨论】:

  • 所以微软破解了代码?听起来很奇怪。我知道它是在 dotNetFramework 3.0 中引入的,但它不应该在以后的版本中工作吗?如果是这种情况,替换 IsRequired 属性的属性是什么?
  • 微软官方的解释可以参考这个链接:docs.microsoft.com/en-us/dotnet/framework/wcf/…
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多