1

好的。这是我公司的客户门户,它是一个 MVC 2 项目。我们有一个后端 SAP 系统,门户从中提取数据。但它不会直接命中 SAP,它会向 VB 应用程序发送一个 xml 请求,该应用程序获取数据并将其以 xml 响应的形式发回。有一个接口IRequest,所有各种请求实现的例子都是CustomerNumberRequestCompanyNameRequest等等。这些都实现了方法ToXml顾名思义,它只是构建要发送的 xml。所有现有的请求都可以正常工作。(让我先说我继承了这个项目,而编写它的人不再和我们在一起)我现在正尝试发送请求以从 SAP 获取 Rep Groups。我基本上逐字复制了其他请求之一,进行了必要的调整以发送适当的请求。但它不断失败,出现我不明白的错误消息:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://tempuri.org/:request时出错。InnerException 消息是“反序列化程序无法加载要反序列化的类型,因为在程序集“XXXXX.CustomerPortal.Domain,版本=1.0.0.0,文化=中性,PublicKeyToken=null”中找不到类型“XXXXX.CustomerPortal.Domain.RepGroupRequest” '。检查被序列化的类型是否与被反序列化的类型具有相同的合同,并且使用了相同的程序集。有关更多详细信息,请参阅 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被击中时所说的),它在整个过程中都被使用。我显然迷路了,请帮助!

4

1 回答 1

1

引用你的例外

检查被序列化的类型是否与被反序列化的类型具有相同的合同,并且使用相同的程序集

检查 CustomerPortal.Domain.RepGroupRequest 所在两端的库版本,以确保它们的版本完全相同。

于 2011-06-10T16:14:39.987 回答