我在從服務調用方法時遇到問題。該錯誤只發生在.NET中,Java似乎正常工作。服務中的大多數方法都可以與.NET一起工作,到目前爲止,其中有2個引發了異常。這項服務是開放的,如果你想嘗試重現:http://radar.zhaw.ch/services/AirTrafficWebService.wsdl類型爲「xxx」的對象無法轉換爲「yyy」類型
異常
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();
編輯:
的響應似乎是由出同時含有飛機對象和AirplaneTrackingPoint製成的單個對象的列表的列表的(例如[0]飛機,[1]緯度,[2]經度,[3]方位等)。所以看起來.NET正在從列表元素中取出第一個元素並將其用作返回值。 Java似乎忽略了列表中列表的第一個元素,而是使列表中的對象脫離列表的其餘部分。
有人可以解釋這種行爲嗎?
也許你的服務定義改變了一些東西,忘了更新您的服務參考? –