Ошибка десериализации MVC
Хорошо. Это портал клиентов моей компании, это проект MVC 2. У нас есть серверная система SAP, из которой портал извлекает данные. Но он напрямую не обращается к SAP, он отправляет запрос xml в приложение VB, которое получает данные и отправляет их обратно в ответе xml. Есть интерфейс IRequest
что все различные запросы реализуют примеры будут CustomerNumberRequest
, CompanyNameRequest
и т. д. Все они реализуют метод ToXml
который, как следует из названия, просто создает xml для отправки. Все существующие запросы работают нормально. (Позвольте мне предвосхитить это, сказав, что я унаследовал этот проект, а парня, который написал его, больше нет с нами). Сейчас я пытаюсь отправить запрос на получение групп представителей от SAP. Я в основном скопировал один из других запросов дословно, сделав необходимые настройки для отправки соответствующего запроса. Но это продолжает терпеть неудачу с сообщениями об ошибках, которые я не понимаю:
Средство форматирования выдало исключение при попытке десериализации сообщения: при попытке десериализации параметра http://tempuri.org/:request произошла ошибка. Сообщение InnerException было "Десериализатор не может загрузить тип для десериализации, потому что тип" XXXXX.CustomerPortal.Domain.RepGroupRequest "не найден в сборке" XXXXX.CustomerPortal.Domain, Версия =1.0.0.0, Culture= нейтральный, PublicKeyToken=null ". Убедитесь, что сериализуемый тип имеет тот же контракт, что и десериализованный тип, и используется та же сборка. '. Пожалуйста, смотрите InnerException для более подробной информации.
Эта ошибка происходит прямо в _communicationService.ProcessRequest(request);
(показано ниже) ProcessRequest
Метод он просто пытается создать NetDataContractSerializer
Вот:
public override XmlObjectSerializer CreateSerializer(Type type, XmlDictionaryString name, XmlDictionaryString ns, IList<Type> knownTypes)
{
return new NetDataContractSerializer();
}
а потом он умирает. Это вызываемые методы:
private void PopulateRepGroups()
{
List<string> repGroups = new List<string>();
RepGroupRequest request = new RepGroupRequest();
foreach (RepGroup repGroup in _repService.GetRepGroups(request))
repGroups.Add(repGroup.RepGroupName);
ViewData["RepGroups"] = new SelectList(repGroups);
}
public List<RepGroup> GetRepGroups(RepGroupRequest request)
{
string response = _communicationService.ProcessRequest(request);
return RepGroupResponseFactory.GetRepGroupResponse(response);
}
Кто-нибудь может сказать мне, что говорит мне это сообщение об ошибке? Он говорит, что тип не может быть найден, но тип должен быть IRequest (это то, что он говорит, когда CreateSerializer
ударил), который используется во всем этом. Я явно потерян, пожалуйста, помогите!
1 ответ
Цитируя ваше исключение
Убедитесь, что сериализуемый тип имеет тот же контракт, что и десериализованный тип, и используется та же сборка
Проверьте версию библиотеки на обоих концах, в которой находится CustomerPortal.Domain.RepGroupRequest, чтобы убедиться, что это точно одна и та же версия.