C# SoapHeader类中的参数化构造函数
场景我在C#Net中有一个web服务(.asmx)。我包括了一个继承自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。我认为序列化是在请求和响应期间发
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。此外,在定义合同时也有一些限制,因此您可能希望将它们放在手边。