gpt4 book ai didi

c# - 类型为 "xxx"的对象无法转换为类型 "yyy"

转载 作者:行者123 更新时间:2023-11-30 04:56:47 25 4
gpt4 key购买 nike

我在从服务调用方法时遇到问题。该错误仅发生在 .NET 中,Java 似乎工作正常。该服务中的大多数方法都适用于 .NET,到目前为止,其中 2 个方法已引发异常。如果您想尝试重现,该服务已开放:http://radar.zhaw.ch/services/AirTrafficWebService.wsdl

异常

System.ArgumentException occurred
Message=Das Objekt mit dem Typ "AirTrafficWcfWrapper.ServiceReference1.Airplane[]" kann nicht in den Typ "AirTrafficWcfWrapper.ServiceReference1.AirplaneTrackingPoint[]" konvertiert werden.
Source=mscorlib
StackTrace:
Server stack trace:
bei System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
bei System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr)
bei System.Reflection.RtFieldInfo.InternalSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture, Boolean doVisibilityCheck, Boolean doCheckConsistency)
bei System.Reflection.RtFieldInfo.InternalSetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture, Boolean doVisibilityCheck)
bei System.Reflection.RtFieldInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, CultureInfo culture)
bei System.Reflection.FieldInfo.SetValue(Object obj, Object value)
bei System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)
bei System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc)
bei System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei AirTrafficWcfWrapper.ServiceReference1.AirTrafficWebService.getAirplaneTrackingPoints(getAirplaneTrackingPointsRequest request)
bei AirTrafficWcfWrapper.ServiceReference1.AirTrafficWebServiceClient.AirTrafficWcfWrapper.ServiceReference1.AirTrafficWebService.getAirplaneTrackingPoints(getAirplaneTrackingPointsRequest request) in D:\Projekte\C#\WP7\Airtraffic\Tests\SilverlightDesktop\AirTrafficWcfWrapper\Service References\ServiceReference1\Reference.cs:Zeile 1234.
InnerException:

它被扔到生成的 Reference.cs 文件中,如下所示:

    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
AirTrafficWcfWrapper.ServiceReference1.getAirplaneTrackingPointsResponse AirTrafficWcfWrapper.ServiceReference1.AirTrafficWebService.getAirplaneTrackingPoints(AirTrafficWcfWrapper.ServiceReference1.getAirplaneTrackingPointsRequest request) {
return base.Channel.getAirplaneTrackingPoints(request); //<--HERE
}

.NET 调用:

AirplaneTrackingPoint[] tps = _airTrafficService.getAirplaneTrackingPoints(icao, 0, 0, false);

Java 调用:

List<AirplaneTrackingPoint> tps = service.getAirplaneTrackingPoints(icao, 0, 0, false).getItem();

编辑:

响应似乎由一个列表组成,其中包含 Airplane 对象和 AirplaneTrackingPoint 组成的单个对象的列表(例如 [0] Airplane、[1] Latitude、[2] Longitude、[3] ] 轴承等)。因此,.NET 似乎正在从列表元素中取出第一个元素并将其用作返回值。 Java 似乎忽略了列表中列表的第一个元素,而是从列表的其余部分创建了一个对象。

谁能解释一下这种行为吗?

最佳答案

您是否更改了服务但忘记更新您的服务引用号?也许早些时候您返回了一个 Airplane 对象列表,并且有时您更改了它以返回您自己的新数据结构。如果右键单击 .NET 项目中的服务引用,您可以选择更新它,此时会重新创建为您执行所有操作的代码(在 Reference.cs 中)。

更新:我可以确认它在 VS2010 中不能开箱即用。

我尝试在 .NET 4 和 .NET 3.5 中运行客户端。第一次我从服务器收到一些奇怪的错误异常,其中包含 SQL 查询字符串,现在我只是一遍又一遍地收到强制转换错误。我按照标准 VS2010 过程添加了服务引用,因此要么是服务问题,要么是 WSDL 无法与 svcutil 一起工作(这也是一个可能的问题)。

当我将服务引用更改为始终生成消息契约并使用它们时,出现以下错误:

{"The top XML element 'return' from namespace '' references distinct types System.String and AirplaneTrackingTest.AirTraffic.Airplane[]. Use XML attributes to specify another XML name or namespace for the element or types."}

我会联系服务提供商,询问他们的方法是否有适当的测试参数,以及他们是否有 C# 中的引用客户端实现。

关于c# - 类型为 "xxx"的对象无法转换为类型 "yyy",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8297665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com