Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取错误:字典中不存在给定的密钥。生产中_C#_Asp.net_Windows_Web Services_Iis - Fatal编程技术网

C# 获取错误:字典中不存在给定的密钥。生产中

C# 获取错误:字典中不存在给定的密钥。生产中,c#,asp.net,windows,web-services,iis,C#,Asp.net,Windows,Web Services,Iis,我正在使用ASP.NET4.0W/a C#Web服务。这还利用了一个C#库,该库在开发和其他应用程序(Skype bot和Windows窗体)中运行良好 我使用JQuery通过JSON与web服务通信。在开发过程中,这是很好的。在生产中,它部分起作用。我可以使用一些命令,但其他命令只会抛出此错误: Error: The given key was not present in the dictionary. 我不确定从哪里开始。我无法单步执行代码,因为它只发生在prod中。我检查了IIS日志,

我正在使用ASP.NET4.0W/a C#Web服务。这还利用了一个C#库,该库在开发和其他应用程序(Skype bot和Windows窗体)中运行良好

我使用JQuery通过JSON与web服务通信。在开发过程中,这是很好的。在生产中,它部分起作用。我可以使用一些命令,但其他命令只会抛出此错误:

Error: The given key was not present in the dictionary.

我不确定从哪里开始。我无法单步执行代码,因为它只发生在prod中。我检查了IIS日志,每个请求都有200个状态,因此它似乎是应用程序本身内部的东西。您知道从何处开始吗?

错误表明服务器端代码试图使用字典中不存在的密钥访问字典

我建议修改代码,将错误处理放在所有字典访问中。处理错误时,记录试图从字典中读取的密钥

记录异常详细信息时,明智的做法是记录所有可用信息

Exception.ToString()

此错误表明服务器端代码正试图使用字典中不存在的密钥访问字典

我建议修改代码,将错误处理放在所有字典访问中。处理错误时,记录试图从字典中读取的密钥

记录异常详细信息时,明智的做法是记录所有可用信息

Exception.ToString()

问题是我使用WebClient调用了一个需要登录的URL。我设置了我的应用程序池和我的域凭据,然后我可以调用提示登录的页面


调用页面后,我就能够填充一个列表并在其中循环。引发上述错误的原因是我在一个空列表中循环。

问题是我使用WebClient调用了一个需要登录的URL。我设置了我的应用程序池和我的域凭据,然后我可以调用提示登录的页面


调用页面后,我就能够填充一个列表并在其中循环。引发上述错误的原因是我在一个空列表中循环。

您可以从正在用作

declare @c uniqueidentifier
while(1=1)
begin
    select top 1 @c = conversation_handle from dbo.yourqueuenqme
    if (@@ROWCOUNT = 0)
    break
    end conversation @c with cleanup
end

在那之后它会起作用的

您可以从正在用作的sqlsrver队列中删除所有队列消息

declare @c uniqueidentifier
while(1=1)
begin
    select top 1 @c = conversation_handle from dbo.yourqueuenqme
    if (@@ROWCOUNT = 0)
    break
    end conversation @c with cleanup
end

在那之后它会起作用的

可能有很多东西。取决于词典的填充方式。如果它是从一个数据库中填充的,而您使用另一个数据库进行生产,这可能是您的问题。正如@SLaks所说,堆栈跟踪会有所帮助。可能会有很多东西。取决于词典的填充方式。如果它是从一个数据库中填充的,而您使用另一个数据库进行生产,这可能是您的问题。正如@SLaks所说,堆栈跟踪会有所帮助。调用
Exception.ToString()
可能更好:它提供了上述所有信息,在某些情况下还提供了更多信息(例如
FileNotFoundException
在适当的情况下包括FusionLog)。我添加了错误检查。我在每个代码块周围都放置了try捕获,但没有抛出异常。@Sugitime:我保证,如果您收到了该消息,会在某个地方抛出异常。是的,您必须是正确的。好的,我会继续查看消息的来源。好的,我更新了DLL,但由于某些原因,应用程序仍然使用旧的DLL。DLL未在服务器上注册。即使我删除DLL并尝试运行使用它的命令,该命令仍会处理(然后抛出错误)。你知道如何取消缓存这个DLL吗?调用
Exception.ToString()
可能更好:它提供了上面所有的信息,在某些情况下还提供了更多信息(例如
FileNotFoundException
在适当的情况下包括FusionLog)。我添加了错误检查。我在每个代码块周围都放置了try捕获,但没有抛出异常。@Sugitime:我保证,如果您收到了该消息,会在某个地方抛出异常。是的,您必须是正确的。好的,我会继续查看消息的来源。好的,我更新了DLL,但由于某些原因,应用程序仍然使用旧的DLL。DLL未在服务器上注册。即使我删除DLL并尝试运行使用它的命令,该命令仍会处理(然后抛出错误)。你知道如何去缓存这个DLL吗?