Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.NET Core 3.1 SOAP platform not supported error "Compiling JScript/CSharp scripts is not supported"

I am using a WSDL file (wsdl.zip) provided by Amadeus. When trying to call the service method using the below code, it threw a System.PlatformNotSupportedException saying "Compiling JScript/CSharp scripts is not supported"

public async Task<Fare_MasterPricerTravelBoardSearchResponse> SearchFlight(Session session,
            Fare_MasterPricerTravelBoardSearch searchData)
        {
            var _client = new AmadeusWebServicesPTClient();
            var result = await _client.Fare_MasterPricerTravelBoardSearchAsync(session, searchData);
            return result;
        }

Is this really something that is not supported by the tool yet?

Stack Trace:

at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location)
   at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type)
   at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   at System.ServiceModel.Description.XmlSerializerHelper.FromMappingsViaReflection(XmlMapping[] mappings, Type type)
   at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.SerializerGenerationContext.GenerateSerializers()
   at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.SerializerGenerationContext.GetSerializer(Int32 handle)
   at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.SerializerStub.GetSerializer()
   at System.ServiceModel.Description.XmlSerializerOperationBehavior.Reflector.MessageInfo.get_HeaderSerializer()
   at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.AddHeadersToMessage(Message message, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
   at System.ServiceModel.Dispatcher.OperationFormatter.SerializeRequest(MessageVersion messageVersion, Object[] parameters)
   at System.ServiceModel.Dispatcher.ProxyOperationRuntime.BeforeRequest(ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.PrepareCall(ProxyOperationRuntime operation, Boolean oneway, ProxyRpc& rpc)
   at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.Begin()
   at System.ServiceModel.Channels.ServiceChannel.BeginCall(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, TimeSpan timeout, AsyncCallback callback, Object asyncState)
   at System.ServiceModel.Channels.ServiceChannel.BeginCall(ServiceChannel channel, ProxyOperationRuntime operation, Object[] ins, AsyncCallback callback, Object asyncState)
   at System.ServiceModel.Channels.ServiceChannelProxy.TaskCreator.CreateGenericTask(ServiceChannel channel, ProxyOperationRuntime operation, Object[] inputParameters)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at SkywayTravel.Amadeus.Air.MasterPricerTravelBoardSearchClient.<SearchFlight>d__1.MoveNext() in E:\MobileAppTelligence\Projects\SkywayTravel\SkywayTravel.Amadeus.Air\MasterPricerTravelBoardSearchClient.cs:line 29
like image 317
Rakesh Kumar Avatar asked Apr 01 '20 17:04

Rakesh Kumar


1 Answers

As you have already posted the issue to Github repository, I am here just for sharing the snapshot of the solution for others.
There is something wrong with the generated type by Microsoft WCF Web Service Reference Provider tool.
As shmao said,

The property is a 2-dimensional array, but the XmlArrayItemAttribute specified the item type as typeof(ListViewRecordColumn). To work around the issue, we can change the item type to typeof(ListViewRecordColumn[]).

i.e. Change **:

/// <remarks/>
[System.Xml.Serialization.XmlArrayAttribute(Order=5)]
** [System.Xml.Serialization.XmlArrayItemAttribute("columns", typeof(ListViewRecordColumn), IsNullable=false)]
public ListViewRecordColumn[][] records
{
    get
    {
        return this.recordsField;
    }
    set
    {
        this.recordsField = value;
    }
}

To:

[System.Xml.Serialization.XmlArrayItemAttribute("columns", typeof(ListViewRecordColumn[]), IsNullable=false)]

For details,
https://github.com/dotnet/wcf/issues/2219

like image 167
Abraham Qian Avatar answered Nov 01 '22 04:11

Abraham Qian