【问题标题】:WCF strage behavior with object serialization带有对象序列化的 WCF 策略行为
【发布时间】:2023-03-03 04:48:01
【问题描述】:

最近我在 WCF 序列化中遇到了一个奇怪的行为。

它是一个简单的服务,它暴露一个操作契约并返回一个类的对象(这个类没有用 [Serializable] 或 [DataContract] 属性修饰。

但是,当我从客户端调用此操作时,它可以完美运行,并且消费者会收到该类的对象(其中包含实际数据)。

据我所知,它不应该通过电线传递,因为它不能被序列化,如果我遗漏了什么,请告诉我。

代码示例

 public class MyService:IService
{      

    public Person GetPerson()
    {
        Person person = new Person();
        person.Name = "Brian";
        return person;
    }


}



public class Person 
{

    public string Name { get; set; }      

}

<services>

  <service name="MyService">
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/MyService"/>
      </baseAddresses>
    </host>

    <endpoint address="TestService1"
              binding="basicHttpBinding"
              contract="BindingTestServer.IService" ></endpoint>

  </service>
</services>
   <behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="False" />
    </behavior>
  </serviceBehaviors>
</behaviors>

【问题讨论】:

    标签: wcf serialization datacontract wcf-serialization


    【解决方案1】:

    由于许多程序员对 [DataContract] 和 [DataMember] 属性感到不知所措,Microsoft 让数据协定序列化程序处理所有类 - 即使没有任何这些属性 - 就像旧的 XML 序列化程序一样。

    因此您不必再添加数据协定或数据成员属性 - 如果您不这样做,那么数据协定序列化程序将序列化您的类上的所有公共属性,就像 XML 序列化程序一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-14
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-08
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多