ASP.net 웹 서비스의 기본 메서드 중 하나에서 이상한 동작이 발생했습니다. 우선 : 이것은 수년 이래로 생산적인 코드이며 지금까지 문제가보고 된 적이 없습니다. 그러나 단원 테스트에서이 문제를 두 번 인식 했으므로 현재 개발 단계에 있거나 실제 문제인지 혼란 스럽습니다. 항목 이미 추가되었습니다"ArgumentException : 이미 항목이 추가되었습니다"해시 테이블
다음은 오류
System.ArgumentException 내 코드입니다. 사전의 키 : '6'키 인 추가 :
public Message Add(GatewayMessageTypes type, string strMessage, CultureInfo language) { var message = new Message(type, strMessage, language); int intCount = _messages.Count + 1; if (_messages.ContainsKey(intCount)) { _messages.Remove(intCount); } _messages.Add(intCount, message); return message; }
_messages
는 다음과 같이 정의된다 : '6'
는 _messages.Add
가 호출 될 때 발생
public class MessageHandler
{
private readonly Hashtable _messages = new Hashtable();
그리고이에 messageHandler 사용됩니다 기본 클래스에 정의 된 모든 웹 서비스에서
public abstract class ServiceBase
{
public MessageHandler MessageHandler { get; protected set; }
그것은 바로입니다
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Hashtable.Add(Object key, Object value)
at GISGatewayCore.MessageHandler.Add(GatewayMessageTypes strType, String strMessage, CultureInfo language) in GISGateway\GISGatewayCore\MessageHandler.cs:line 69
at GISGatewayCore.MessageHandler.AddAndLog(GatewayMessageTypes type, String strMessage, CultureInfo language) in GISGateway\GISGatewayCore\MessageHandler.cs:line 81
at GISGateway.Services.GetClosestFacilityServices.<>c__DisplayClass4.<GetClosestFacilities>b__1(Object index) in GISGateway\GISGateway.Services\GetClosestFacilityServices.cs:line 592
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart(Object obj)
, 컬렉션의 6 개 항목이 이미이 있고, 6 번 정확히 추가해야합니다 새 메시지처럼 보이는 :
이 스택 트레이스입니다. 그래서 문제가 무엇입니까?
- 제거에 실패 했습니까? 실행이 느려졌습니까? 그러나 코드는 동 기적으로 문제가 없어야합니다.
- 두 개의 서로 다른 값이 같은 항목은 무엇입니까? 나는 이것이 제외 될 수 있다고 확신합니다.
- 동일한 코드를 사용하는 두 개의 병렬 프로세스가 있습니까? 내 단위 테스트는이 부분을 공통으로 사용하고, 두 가지 테스트는 동일한 웹 서비스 끝점을 사용합니다. 하지만 내 물건 중 어느 것도 고정적이지 않으므로 어떻게 될 수 있습니까?
메시지 클래스도 표시해야합니다. – user3185569
@ user3185569 왜이 문제에 대한 책임이 있다고 생각합니까? 속성이있는 단순한 클래스이며 내부에는 논리가 없습니다. – Max