2

Quick Hintergrund Info: Es gibt eine Wcf mit Authentifizierung, die BasicHttpBinding verwenden. Der Dataservice.cs enthält den dataserviceclient basierend auf den Service-Metadaten (generiert mit svcutil).Xamarin WCF BasicHttpBinding - Methode oder Operation ist nicht implementiert

Ich machte zuerst eine Konsole App mit dem Code und es funktionierte perfekt, dann habe ich ein Xamarin Android-Projekt. Ich habe den Code kopiert. referenzierte system.runtime.serialization und system.servicemodel. Dies gibt mir eine Die Methode oder Operation ist nicht implementiert Fehler.

Hauptcode:

 base.OnCreate(bundle); 


     BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential); 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 
     EndpointAddress address = new EndpointAddress("https://serviceurl/service1.svc"); 
     PermissiveCertificatePolicy.Enact("CN=MySelfSignedCert"); 

     var client = new DataServiceClient(binding, address); 

     client.ClientCredentials.UserName.UserName = "Username"; 
     client.ClientCredentials.UserName.Password = "Passord"; 

     try 
     { 

      var projects = client.GetDataTest(1); 
     } 
     catch (Exception ex) 
     { 
      var error = ex.Message; 

     } 

Ich bin neu programmieren Xamarin so konnte ich hier entscheidende Punkt fehlt, aber bitte denken Sie daran, dass dies funktioniert als Konsolenanwendung und der Service ist online (nicht localhost).

Unhandled Exception: 

System.NotImplementedException: Die Methode oder Operation ist nicht implementiert.

07-20 11: 35: 39.704 D/Mono (1452): DllImport versucht zu laden: '/system/lib/liblog.so'. 07-20 11: 35: 39.704 D/Mono (1452): DllImport geladene Bibliothek '/system/lib/liblog.so'. 07-20 11: 35: 39.704 D/Mono (1452): Dll Suche in: '/system/lib/liblog.so' ('/system/lib/liblog.so'). 07-20 11: 35: 39.704 D/Mono (1452): Suche nach '__android_log_print'. 07-20 11: 35: 39.704 D/Mono (1452): Songtext '__android_log_print'. 07-20 11: 35: 39.704 D/Mono (1452): Gefunden als '__android_log_print'. 07-20 11: 35: 39.708 I/MonoDroid (1452): UNHANDLED AUSNAHME: 07-20 11: 35: 39.708 I/MonoDroid (1452): System.NotImplementedException: Die Methode oder Operation ist nicht implementiert. November 7-20: 35: 39,708 I/MonoDroid (1452): bei System.ServiceModel.BasicHttpBinding.CreateSecurityBindingElement() [0x00025] in

/Benutzer/Builder/data/Fahrspuren/2923/52.635.947/source/mono /mcs/class/System.ServiceModel/System.ServiceModel/BasicHttpBinding_4_5.cs:125 November 07-20: 35: 39,708 I/MonoDroid (1452): bei System.ServiceModel.BasicHttpBinding.CreateBindingElements() [0x00006] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/BasicHttpBinding_4_5.cs:98 07-20 11: 35: 39.708 I/MonoDroid (1452): bei System.ServiceModel.Channels.CustomBinding..ctor (System.ServiceModel.Channels.Binding-Bindung) [0x00000] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/CustomBinding.cs:60 07-20 November: 35: 39,708 I/MonoDroid (1452): bei System.ServiceModel.Channels.Binding.CreateContext (System.ServiceModel.Channels.BindingParameterCollection Parameter) [0x00000] in

/Benutzer/Builder/data/Fahrspuren/2923/52.635.947/source/mono /mcs/class/System.ServiceModel/System.ServiceModel.Channels/Binding.cs:96 07-20 11: 35: 39.708 I/Monodroid (1452): at System.ServiceModel.Channels.Binding.CanBuildChannelFactory [TChannel] (System.ServiceModel.Channels.BindingParameterCollection-Parameter) [0x00011] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/Binding.cs:267 07-20 11: 35: 39.708 I/MonoDroid (1452): bei System.ServiceModel.ChannelFactory.(CreateFactory) [0x000ad] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory.cs:199 November 7-20 : 35: 39.708 I/MonoDroid (1452): bei System.ServiceModel.ChannelFactory.OnOpening() [0x00006] in

/Benutzer/Ersteller/Daten/Lanes/2923/52635947/Quelle/Mono/MCS/Klasse/System.ServiceModel/System.ServiceModel/ChannelFactory.cs: 383 November 07-20: 35: 39,708 I/MonoDroid (1452): bei System.ServiceModel.Channels.CommunicationObject.ProcessOpening() [0x00017] in

/Benutzer/Ersteller/Daten/Lanes/2923/52635947/Quelle/Mono/MCS/Klasse/Syste m.ServiceModel/System.ServiceModel.Channels/CommunicationObject.cs: 276 07-20 11: 35: 39.708 I/MonoDroid (1452): bei System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan Timeout) [0x00000] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/CommunicationObject.cs:169 November 07-20: 35: 39,708 I/MonoDroid (1452): bei System.ServiceModel.Channels.CommunicationObject.Open() [0x00000] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/ System.ServiceModel.Channels/CommunicationObject.cs: 164 07-20 11: 35: 39.708 I/MonoDroid (1452): um System.ServiceModel.ChannelFact (Ory.EnsureOpened) [0x00058] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory.cs:297 07- 20 11: 35: 39.708 I/MonoDroid (1452): unter System.ServiceModel.ChannelFactory`1 [TChannel] .CreateChannel() [0x00000] in

/Benutzer/Ersteller/Daten/Lanes/2923/52635947/Quelle /mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs:108 07-20 11: 35: 39.708 I/Monodroid (1452): at System.ServiceModel.ClientBase`1 [TChannel] .CreateChannel () [0x00000] in

/Benutzer/Ersteller/Daten/Lanes/2923/52635947/Quelle/Mono/m cs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs: 266 07-20 11: 35: 39.708 ich/Monodroid (1452): um System.ServiceModel.ClientBase_1 [TChannel] .get_InnerChannel() [0x0000b ] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:186 7-20 November: 35: 39,708 I/MonoDroid (1452): at System.ServiceModel.ClientBase_1 [TChannel] .get_Channel() [0x00000] in

/Benutzer/erbauer/daten/lanes/2923/52635947/source/mono/mcs/klasse/System.ServiceModel/System.ServiceModel/ClientBase.cs: 192 07-20 11: 35: 39.708 I/Monodroid (1452): bei DataServiceClient.GetProjects (Int32 firmaid) [0x00001] in C: \ Users \ Benutzername \ doc uments \ Visual Studio 2015 \ Projects \ somethingMobileApp

\ somethingMobileAppAndroid \ DataService.cs: 10752 07-20 November: 35: 39,708 I/MonoDroid (1452): bei somethingMobileAppAndroid.MainActivity.OnCreate (Android.OS.Bundle Bündel) [0x0006d] in C: \ Benutzer \ Benutzername \ Dokumente \ Visual Studio 2015 \ Projects

\ somethingMobileApp \ somethingMobileAppAndroid \ MainActivity.cs: 50 07-20 November: 35: 39,708 D/Mono (1452): DllImport Suche in: '__Internal' ('(null)'). 07-20 11: 35: 39.712 D/Mono (1452): Suche nach 'java_interop_jnienv_new_string'. 07-20 11: 35: 39.712 D/Mono (1452): Sondierung von 'java_interop_jnienv_new_string'. 07-20 11: 35: 39.712 D/Mono (1452): Gefunden als 'java_interop_jnienv_new_string'. 07-20 11: 35: 39.716 D/Mono (1452): DllImport Suche in: '__Internal' ('(null)'). 07-20 11: 35: 39.716 D/Mono (1452): Suche nach 'java_interop_jnienv_throw'. 07-20 11: 35: 39.716 D/Mono (1452): Sondierung von 'java_interop_jnienv_throw'. 07-20 11: 35: 39.716 D/Mono (1452): Gefunden als 'java_interop_jnienv_throw'. Eine nicht behandelte Ausnahme ist aufgetreten.

07-20 11: 35: 42,112 E/Mono (1452): November 07-20: 35: 42,112 E/Mono (1452): Unbehandelte Ausnahme: November 07-20: 35: 42,112 E/mono (1452): System.NotImplementedException: Die Methode oder Operation ist nicht implementiert. 07-20 11: 35: 42,112 E/Mono (1452): at (Wrapper dynamische Methode) System.Object: c637c172-2e79-4a17-a720-5e2325d945f7 (intptr, intptr, intptr) 07-20 11:35 : 42.112 E/mono (1452): at (systemeigener Wrapper) System.Object: c637c172-2e79-4a17-a720-5e2325d945f7 (intptr, intptr, intptr) In mgmain JNI_OnLoad 07-20 11:35: 42.112 E/mono-rt (1452): [FEHLER] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: Die Methode oder Operation ist nicht implementiert. 07-20 11: 35: 42,112 E/mono-rt (1452): at (Wrapper-Methode) System.Object: c637c172-2e79-4a17-a720-5e2325d945f7 (intptr, intptr, intptr) 07-20 11 : 35: 42.112 E/mono-rt (1452): at (native-to-managed) System.Object: c637c172-2e79-4a17-a720-5e2325d945f7 (intptr, intptr, intptr)

Irgendwelche Vorschläge? :)

+0

Die Service-URL und der Benutzername/Passord sind in echtem Code in Ordnung, werden aber hier mit generischem String maskiert. – Kenneth

+0

Ich würde empfehlen, mindestens die ersten paar Zeilen des Stack-Trace aus der Ausnahme "Die Methode oder Operation ist nicht implementiert Fehler" hinzuzufügen. Im Moment erwähnt die Frage nicht, welche bestimmte Methode oder Operation tatsächlich fehlt. –

+0

Sehr guter Punkt. Ich werde es zum ursprünglichen Beitrag hinzufügen – Kenneth

Antwort

0

Der Fehler, den Sie sehen, wird wahrscheinlich durch die aktuellen Einschränkungen der WCF-Implementierung in Mono und Xamarin.Android verursacht. Um eine Vermutung zu machen, könnte der Authentifizierungsmodus der Kern des Problems:

Authentifizierung mit BasicHttpSecurityMode.Transport wird unterstützt:
http://docs.xamarin.com/guides/cross-platform/application_fundamentals/web_services/#Calling_a_WCF_Service_with_Client_Credential_Security

Authentifizierung mit BasicHttpSecurityMode.TransportWithMessageCredential ist (noch) nicht unterstützt:
http://forums.xamarin.com/discussion/6493/wcf-basichttpbinding-with-transportwithmessagecredential-username-failure-ios-and-android

(Von http://forums.xamarin.com/discussion/comment/44741/#Comment_44741)

+0

Ich denke, aber die Ausnahme ist auf dem Client.GetDataTest. – Kenneth

+0

Ich denke, das ist die richtige Antwort es scheint wie Xamarin system.servicemodel ist 2.0.5.0 und Konsole App Windows system.servicemodel ist 4.0.0.0. Obwohl die Dokumentation sagt unterstützt :( – Kenneth

0

Von der Xamarin Dokumentation:

Verwendung von Client-Credential Security WCF-Dienste auch die Service-Clients erfordern kann mit Anmeldeinformationen zu authentifizieren. Die Xamarin-Plattform unterstützt das WS-Sicherheitsprotokoll nicht, mit dem Clients Anmeldeinformationen innerhalb des SOAP-Nachrichtenumschlags senden können. Die Xamarin-Plattform unterstützt jedoch die Möglichkeit, Anmeldeinformationen für die HTTP-Basisauthentifizierung an den Server zu senden, indem der entsprechende ClientCredentialType angegeben wird:

basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; Anschließend können die grundlegenden Authentifizierungsdaten angegeben werden:

client.ClientCredentials.UserName.UserName = @ "foo"; client.ClientCredentials.UserName.Passwort = @ "mrsnuggles";

bei Gefunden: https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/#wcf

Zeigt an, dass die Client-Authentifizierung

0

Hier implementiert ist, ist die Antwort, weshalb ich die frühere Antwort als korrekt markiert.

Xamarin unterstützt TransportWithMessageCredential nicht. Sie unterstützen TransportCredentialOnly.

BasicHttpBinding (BasicHttpSecurityMode.TransportWithMessageCredential) Gibt den Fehler beim Aufrufen des Dienstes an.

Das Problem, das ich habe, ist, dass MSDN darauf hinweist, dass TransportCredentialOnly mit Vorsicht verwendet werden sollte, da es den Benutzernamen und das Kennwort im Klartext über HTTP sendet.

Ich hoffe, Xamarin würde eine sicherere Art des Sprechens mit dem WCF implementieren. Wie TransportWithMessageCredential oder WSHTTPBINDING.

Verwandte Themen