在asp.net Web服务中没有为此对象错误定义无参数构造函数

rf_*_*son 2 c# asp.net web-services asmx

尝试运行我的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()
Run Code Online (Sandbox Code Playgroud)

这是我在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");
    }
Run Code Online (Sandbox Code Playgroud)

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

Adi*_*dil 5

你有一个private参数较少的构造函数,在类外无法访问.创建构造,public以便可以在类外部访问它以构造对象WizardService.

public WizardService()
{
    eventLog = new EventLog("EktronWizardServiceLog", "localhost", "EktronWizardService");
}
Run Code Online (Sandbox Code Playgroud)

访问修饰符(C#编程指南)

public类型或成员可以由同一程序集中的任何其他代码或引用它的另一个程序集访问.

private只能通过同一个类或结构中的代码访问类型或成员.

protected类型或成员只能由同一个类或结构中的代码访问,或者在从该类派生的类中访问.

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

你可以阅读更多关于访问修饰符这里.