. NET Core 3.1 SOAP платформа не поддерживается ошибка "Компиляция сценариев JScript / CSharp не поддерживается" - PullRequest
0 голосов
/ 01 апреля 2020

Я использую файл WSDL (wsdl.zip), предоставленный Amadeus. При попытке вызвать метод службы с помощью приведенного ниже кода он вызвал исключение System.PlatformNotSupportedException, говорящее «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;
        }

Это действительно что-то, что еще не поддерживается инструментом?

Трассировка стека:

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

1 Ответ

0 голосов
/ 10 апреля 2020

Поскольку вы уже опубликовали проблему в репозитории Github, я здесь просто для того, чтобы поделиться снимком решения для других.
Что-то не так с сгенерированным типом с помощью инструмента ссылки на веб-службы Microsoft WCF.
Как сказано shmao ,

Свойство является двумерным массивом, но атрибут XmlArrayItemAttribute указывает тип элемента как typeof (ListViewRecordColumn). Чтобы обойти эту проблему, мы можем изменить тип элемента на typeof (ListViewRecordColumn []).

/// <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;
    }
}

Подробнее
https://github.com/dotnet/wcf/issues/2219

...