Ошибка десериализации 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, чтобы убедиться, что это точно одна и та же версия.

Другие вопросы по тегам