Intereting Posts
Настраиваемые виджеты в Android Уменьшает размер файлов .png, что приводит к результату Bitmap в памяти В чем разница между протоколом rtmp и rtsp? Динамически добавлять элементы в список, используя пользовательский адаптер для Android-приложения Внедрение на андроидном холсте Ошибка cmake с андроидом ndk Обновить базу данных sql с помощью ContentValues ​​и метод обновления Как скрыть кнопку закрытия в режиме поиска по умолчанию? Почему EditText в пользовательском составном представлении повторно использует текст, введенный в другой составной экземпляр вида? Поддержка MultiDex в приложении Android-приложения IOException с эмуляцией карты на основе хоста Cordova-plugin-media: Parse ".amr" Аудиофайл на сервере nodejs Предпочитайте размер растрового изображения от фактического Uri до загрузки по шкале Создание подписанного APK в Android Studio Скрыть клавиатуру, когда пользователь нажимает где-нибудь еще на экране в android

Xamarin Android – создание запроса на отдых со сложным параметром (объектом) вызывает исключение, в .NET он отлично работает (с использованием фабрики каналов)

Я начинаю использовать mono droid или Xamarin для Android, поэтому моя идея состояла в том, чтобы повторно использовать большую часть кода, который я уже использовал в .NET.

Одна из вещей, в которой я нуждаюсь в приложении для Android и ios, – это сделать вызовы веб-сервисов, доступных с помощью wcf rest с кодировкой json.

Поэтому мой код прост:

WebHttpBinding webBinding = new WebHttpBinding(); EndpointAddress endPointAddress = new EndpointAddress("http://192.168.126.24:8025/Services/SecurityManagement"); ChannelFactory<ISecurityManagement> newFactory = new ChannelFactory<ISecurityManagement>(webBinding, endPointAddress); newFactory.Endpoint.Behaviors.Add(new WebHttpBehavior() { DefaultOutgoingRequestFormat = System.ServiceModel.Web.WebMessageFormat.Json, DefaultOutgoingResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json }); newFactory.Endpoint.Behaviors.Add(new RestEndPointBehavior()); ISecurityManagement newProxy = newFactory.CreateChannel(); ValidateUserExistenceOutput output = newProxy.ValidateUserExistence(new ValidateUserExistenceInput() { Domain = "CRITICAL", Username = "myUserName" }); 

Достаточно просто, чтобы начать меня (по крайней мере, это была моя идея о моно, сделать в .net повторное использование в моно)

Но когда я запускаю этот код, я получаю следующее исключение исключения:

 System.NotSupportedException: Loading... 07-25 10:43:40.922 E/mono ( 1950): 07-25 10:43:40.922 E/mono ( 1950): Unhandled Exception: 07-25 10:43:40.922 E/mono ( 1950): System.NotSupportedException: Conversion from the argument parameterType 'BusinessOrchestration.SecurityManagement.InputObjects.ValidateUserExistenceInput' is not supported 07-25 10:43:40.922 E/mono ( 1950): at System.ServiceModel.Dispatcher.QueryStringConverter.ConvertValueToString (System.Object parameter, System.Type parameterType) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono-rt ( 1950): at System.ServiceModel.Dispatcher.WebMessageFormatter+WebClientMessageFormatter.SerializeRequest (System.ServiceModel.Channels.MessageVersion messageVersion, System.Object[] parameters) [0x00000] in <filename unkno07-25 10:43:40.922 E/mono ( 1950): at System.ServiceModel.Dispatcher.WebMessageFormatter+WebClientMessageFormatter.SerializeRequest (System.ServiceModel.Channels.MessageVersion messageVersion, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono ( 1950): at System.ServiceModel.Description.WebHttpBehavior+ClientPairFormatter.SerializeRequest (System.ServiceModel.Channels.MessageVersion messageVersion, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono ( 1950): at System.ServiceModel.MonoInternal.ClientRuntimeChannel.CreateRequest (System.ServiceModel.Dispatcher.ClientOperation op, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono ( 1950): at System.ServiceModel.MonoIn 07-25 10:43:40.922 E/mono-rt ( 1950): [ERROR] FATAL UNHANDLED EXCEPTION: System.NotSupportedException: Conversion from the argument parameterType 'BusinessOrchestration.SecurityManagement.InputObjects.ValidateUserExistenceInput' is not supported 07-25 10:43:40.922 E/mono-rt ( 1950): at System.ServiceModel.Dispatcher.QueryStringConverter.ConvertValueToString (System.Object parameter, System.Type parameterType) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono-rt ( 1950): at System.ServiceModel.Dispatcher.WebMessageFormatter+WebClientMessageFormatter.SerializeRequest (System.ServiceModel.Channels.MessageVersion messageVersion, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono-rt ( 1950): at System.ServiceModel.Description.WebHttpBehavior+ClientPairFormatter.SerializeRequest (System.ServiceModel.Channels.MessageVersion messageVersion, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono-rt ( 1950): at System.ServiceModel.MonoInternal.ClientRuntimeChannel.CreateRequest (System.ServiceModel.Dispatcher.ClientOperation op, System.Object[] parameters) [0x00000] in <filename unknown>:0 07-25 10:43:40.922 E/mono-rt ( 1950): at System.Servic The program 'Mono' has exited with code 0 (0x0). 

Я использую тот же самый код в приложении .NET 4.5, и он отлично работает, кажется, что его ошибка при преобразовании объекта в строку (например, json string).

Должен ли он работать непосредственно в моно, поскольку он работает в .NET?

У вас, ребята, есть услуги со сложными входными объектами? Что вы используете для совершения этих звонков?

Спасибо за вашу помощь,

Луис Пиньо

Solutions Collecting From Web of "Xamarin Android – создание запроса на отдых со сложным параметром (объектом) вызывает исключение, в .NET он отлично работает (с использованием фабрики каналов)"

Это не работает, потому что часть объекта, используемого в вашем коде, не была перенесена в Mono, так как они специфичны для Microsoft. Здесь есть информация: Статус состояния Mono

Например, это пространство имен Microsoft.EnterpriseManagement используемое для ISecurityManagement в вашем коде, вероятно, никогда не будет перенесено.

Чтобы работать как с Mono, так и с .Net, ваш код должен соответствовать стандарту .NET . Выполняется работа по согласованию структур Mono, .Net и .Net Core, чтобы они могли скомпилировать общие библиотеки и программы с меньшими различиями кода.