【问题标题】:No parameterless constructor defined for this object error in asp.net web service在 asp.net Web 服务中没有为此对象错误定义无参数构造函数
【发布时间】:2014-04-01 09:06:31
【问题描述】:

我在尝试运行我的 Web 服务 WizardService.asmx 时收到此错误:

System.MissingMethodException: No parameterless constructor defined for this object.
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Web.Services.Protocols.ServerProtocol.CreateServerInstance()
   at System.Web.Services.Protocols.WebServiceHandler.Invoke()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

这是我用 C# 编写的 Web 服务代码

[WebService(Namespace = "http://www.tempuri.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WizardService : WebService
{
    private EventLog eventLog;

    private WizardService()
    {
        eventLog = new EventLog("EktronWizardServiceLog", "localhost", "EktronWizardService");
    }

我在网上看到的所有地方(包括此站点)似乎都表明此错误消息与 MVC 有关,但我没有使用 MVC。这是一个 ASMX .Net 4.5 网络服务。

【问题讨论】:

  • 您必须使用公共默认构造函数进行序列化

标签: c# asp.net web-services asmx


【解决方案1】:

您有private 无参数构造函数,该构造函数在类外无法访问。构造public,以便可以在类外部访问它以构造WizardService 的对象。

public WizardService()
{
    eventLog = new EventLog("EktronWizardServiceLog", "localhost", "EktronWizardService");
}

Access Modifiers (C# Programming Guide)

public该类型或成员可以被同一程序集中的任何其他代码或引用它的其他程序集访问。

private 类型或成员只能由同一类或结构中的代码访问。

protected 类型或成员只能由同一类或结构中的代码或从该类派生的类中的代码访问。

internal该类型或成员可以被同一程序集中的任何代码访问,但不能从另一个程序集中访问。

您可以阅读有关访问修饰符here 的更多信息。

【讨论】:

    【解决方案2】:

    问题:您已经使用private 访问修饰符声明了您的构造函数。所以在类外无法访问来构造对象。

    解决方案:您应该有public 访问修饰符,以便从类外部访问构造函数以构造对象。

    替换这个:

    private WizardService()
    

    有了这个:

    public WizardService()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多