TypeInitializationException:'vService.CheckService'的类型初始化程序引发了异常。

5

当我调用WCF服务时,出现了以下FaultException:

2012-04-02 16:26:00.3593|Error|System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: The type initializer for 'vService.CheckService' threw an exception. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.TypeInitializationException: The type initializer for 'vService.CheckService' threw an exception. ----> System.NullReferenceException: Object reference not set to an instance of an object.
   at vService.CheckService..cctor() in d:\working\code\VioletServer\vService\CheckService.cs:line 14
   --- End of inner ExceptionDetail stack trace ---
   at vService.CheckService..ctor()
   at CreatevService.CheckService()
   at System.ServiceModel.Dispatcher.InstanceProvider.GetInstance(InstanceContext instanceContext, Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.GetInstance(InstanceContext instanceContext, Message request)
   at System.ServiceModel.InstanceContext.GetServiceInstance(Message message)
   at System.ServiceModel.Dispatcher.InstanceBehavior.EnsureServiceInstance(MessageRpc& rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc& rpc)
  ...).

CheckService.cs的第14行是

private static string connStr = ConfigurationManager.ConnectionStrings["violetdb"].ConnectionString;

这个上下文中的异常是什么意思,我该如何解决它?


//CheckService.cs
public class CheckService : ICheckService
{
    private static string connStr = ConfigurationManager.ConnectionStrings["violetdb"].ConnectionString;
    MessageRepository _repo = new MessageRepository(connStr);

    public CheckService(){}

    public CheckService(MessageRepository repo)
    {
        _repo = repo;
    }

    public void SendMessage(string sender, string recipient, string messagetext)
    {
        _repo.DeliverMessage(sender,recipient,messagetext);
    }
}
1个回答

4
很可能您的WCF服务在其应用程序配置文件中没有名为“violetdb”的连接字符串。TypeInitializerException会在此情况下抛出,因为您有一个静态字段在类型构造之前被初始化,而且由于ConnectionStrings [“violetdb”]调用返回null,它会抛出NullReferenceException 。总之,请检查配置文件的<connectionStrings>部分,并确保连接字符串存在。

我在web.config文件的<connectionString>部分中有violetdb连接字符串。由于该项目是一个类库,我只需添加一个app.config文件并复制连接字符串即可。但我仍然遇到了异常。 - Animesh
你的应用程序托管在哪里?是自托管的(例如控制台应用程序或Windows服务)?还是托管在IIS中? - Matthew Abbott
它是在控制台应用程序中自托管的。 - Animesh
能否调试服务正在发生的事情? - Animesh
1
Matthew,我手动设置了连接字符串并发现它可以工作。我觉得奇怪的是连接字符串没有从app.config中获取。我从未见过这种情况。你有什么见解吗? - Animesh
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接