C# SoapHeader类中的参数化构造函数

C# SoapHeader类中的参数化构造函数,c#,web-services,asmx,soap-client,soapheader,C#,Web Services,Asmx,Soap Client,Soapheader,场景我在C#Net中有一个web服务(.asmx)。我包括了一个继承自SoapHeader类的类。我有一个参数化的构造函数,但由于我忘了包含一个无参数的构造函数,当我在客户端更新WebService代理时,它产生了以下错误: Error: User cannot be serialized because it does not have a parameterless constructor. 所以我立即加入了无参数构造函数,问题就结束了 问题 问题1。我认为序列化是在请求和响应期间发

场景我在C#Net中有一个web服务(.asmx)。我包括了一个继承自
SoapHeader
类的类。我有一个参数化的构造函数,但由于我忘了包含一个无参数的构造函数,当我在客户端更新WebService代理时,它产生了以下错误:

   Error: User cannot be serialized because it does not have a parameterless constructor.
所以我立即加入了无参数构造函数,问题就结束了

问题
问题1。我认为序列化是在请求和响应期间发生的,是这里序列化的“类类型”吗(我认为不可能将其作为序列化的对象)?
问题2。我无法访问客户端的参数化构造函数(给出错误:不包含接受1个参数的构造函数)。为什么呢

这是一个简单的学习课程:

public class User : SoapHeader
{
    private string strUid;

    public User(string id)  // cannot access
    {
        strUid = id;
    }

    public User() { }   // included later

    public string UserID
    {
        get
        {
            return strUid;
        }
        set
        {
            strUid = value;
        }
    }
}

可能是重复的,它回答了我的问题2。但是Q1。is not answeredClass类型在wsdl中发布为meta,序列化程序使用它来检测对象的类型。同意,但为什么在上面发出的错误中会显示:无法“序列化”。。。。它试图序列化什么?当我只是更新该Web服务的代理,而不是实际请求或获取响应时,对于没有默认构造函数的类,代理生成器中可能存在一个约束。这就是为什么我更喜欢在单独的项目中共享契约的动态代理,除非它是公共api。此外,在定义合同时也有一些限制,因此您可能希望将它们放在手边。