2013-07-25 6 views
5

Zaczynam używać mono droid lub Xamarin dla Androida, więc moim pomysłem było ponownie użyj większości kodu, którego już używam w .NET.Xamarin Android - Wywołanie żądania spoczynkowego ze złożonym parametrem (obiekt) generuje wyjątek, w .NET działa dobrze (przy użyciu fabryki kanałów)

Jedną z rzeczy, do których potrzebuję mojej aplikacji na Androida i iOS, jest nawiązywanie połączeń z usługami sieciowymi udostępnianymi za pomocą wcf rest z kodowaniem json.

Więc mój kod jest prosty:

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" }); 

wystarczająco proste, aby uzyskać mnie zaczęło (przynajmniej, że był mój pomysł o mono zrobić w .net ponownego użycia w mono)

Ale kiedy biegnę kod ten pojawia się następujący wyjątek wyjątek:

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). 

używam dokładnie tego samego kodu w .NET 4.5 aplikacji i działa dobrze, wydaje się, że jego braku podczas przekształcania obiektu do ciąg (ciąg json, przypuszczam).

Czy powinien działać bezpośrednio w trybie mono, ponieważ działa on w .NET?

Czy masz usługi ze złożonymi obiektami wejściowymi? Jakiego api używasz do wykonywania tych połączeń?

naprzód Dzięki za pomoc,

Luis Pinho

+1

Czy rozwiązałeś ten problem? Stoję w obliczu tego samego problemu, który nie jest w stanie pójść o jeden krok naprzód.Googled o tym nie ma zasobów. Pomóż mi, jeśli masz jakiś pomysł. – dafodil

+0

podobne problemy są opisane tutaj: https://stackoverflow.com/questions/44650314/mono-rest-service-not-supporting-post-method – Hcorg

+0

To jest pytanie z 2013 roku ??? –

Odpowiedz

0

To nie działa, ponieważ niektóre z obiektu używanego w kodzie nie został przeniesiony do Mono, ponieważ są one specyficzne dla firmy Microsoft. Istnieją pewne informacje tutaj: Mono Class Status

Na przykład w tym nazw Microsoft.EnterpriseManagement wykorzystywane do ISecurityManagement w kodzie prawdopodobnie nigdy nie zostanie przeniesiony.

Aby pracować zarówno w trybie Mono, jak i .Net, Twój kod musi być zgodny z .NET standard. Jest to praca w toku, aby zharmonizować struktury Mono, .Net i .Net Core, aby mogły one kompilować popularne biblioteki i programy z mniejszymi różnicami w kodzie.

+0

błąd nie jest związany z 'ISecurityManagement' - to samo dzieje się z już przeniesione klasy. – Hcorg

+0

Witaj, Jimbot, że przestrzeń nazw nie była używana bezpośrednio w obiektach (jak wiesz, że używam tej przestrzeni nazw?), Używaliśmy tego odniesienia, ponieważ korzystaliśmy z rejestrowania bibliotek firmowych Microsoft. – lpinho

+0

Szukam ISecurityManagement na MSDN, ponieważ nie znałem tego interfejsu i jest częścią tego obszaru nazw – Jimbot

Powiązane problemy