Ошибка десериализации MVC - PullRequest
1 голос
/ 10 июня 2011

Хорошо. Это портал клиентов моей компании, это проект 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, Культура = нейтральная, PublicKeyToken = нуль. Проверьте, что тип сериализации имеет тот же контракт как тип десериализован и та же сборка используемый.'. Пожалуйста, смотрите 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 Ответ

1 голос
/ 10 июня 2011

Цитирование вашего исключения

Убедитесь, что сериализуемый тип имеет тот же контракт, что и десериализованный тип, и используется та же сборка

Проверьте версию библиотеки на обоих концах, в которой находится CustomerPortal.Domain.RepGroupRequest, чтобы убедиться, что это точно одна и та же версия.

...