2

クイック背景情報: BasicHttpBindingを使用する認証付きwcfがあります。 Dataservice.csには、サービスメタデータ(svcutilを使用して生成)に基づくdataserviceclientが含まれています。Xamarin WCF BasicHttpBinding - メソッドまたは操作が実装されていません

私は最初にコードを使ってコンソールアプリケーションを作ったが、それは完全に機能し、次に私はxamarinアンドロイドプロジェクトを作った。私はコードをコピーした。 system.runtime.serializationおよびsystem.servicemodelを参照してください。これは、私には、メソッドまたは操作が実装されていないエラーが発生します。

メインコード:

 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; 

     } 

私はので、私はここでのキーポイントを逃すことができ、プログラミングXamarinに新しいですが、(localhostではありません)これはコンソールアプリケーションとして動作し、サービスがオンラインであることを忘れないでください。

Unhandled Exception: 

System.NotImplementedException:メソッドまたは操作が実装されていません。

07-20 11:35:39.704 D/Mono(1452):DllImportがロードしようとしました: '/system/lib/liblog.so'。 07-20 11:35:39.704 D/Mono(1452):DllImport読み込みライブラリ '/system/lib/liblog.so'。 07-20 11:35:39.704 D/Mono(1452): '/system/lib/liblog.so'で検索するDllImport( '/system/lib/liblog.so')。 07-20 11:35:39.704 D/Mono(1452): '__android_log_print'を検索しています。 07-20 11:35:39.704 D/Mono(1452):Probing '__android_log_print'。 07-20 11:35:39.704 D/Mono(1452): '__android_log_print'として見つかりました。 07-20 11:35:39.708 I/MonoDroid(1452):UNHANDLED例外: 07-20 11:35:39.708 I/MonoDroid(1452):System.NotImplementedException:メソッドまたは操作が実装されていません。 7月20日11:35:39.708 I/MonoDroid(1452):System.ServiceModel.BasicHttpBinding.CreateSecurityBindingElementで()[0x00025]

/ユーザ/ビルダー/データ/レーン/ 52635947分の2923 /ソース/モノで/mcs/class/System.ServiceModel/System.ServiceModel/BasicHttpBinding_4_5.cs:125 7月20日11:35:39.708 I/MonoDroid(1452):

でSystem.ServiceModel.BasicHttpBinding.CreateBindingElementsで()[0x00006]

/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) ):System.ServiceModel.Channels.CustomBinding..ctor(System.ServiceModel.Channels.Bindingバインディング)で[0x00000]の

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/CustomBinding.cs:60 7月20日11:35:39.708 I/MonoDroid(1452):

/ユーザ/ビルダー/データ/レーン/ 52635947分の2923 /ソース/モノにおけるSystem.ServiceModel.Channels.Binding.CreateContext(System.ServiceModel.Channels.BindingParameterCollectionパラメータ)[0x00000]で/mcs/class/System.ServiceModel/System.ServiceModel.Channels/Binding.cs:96 07-20 11:35:39.708 I/MonoDroid(1452):System.ServiceModel.Channels.Binding.CanBuildChannelFactory [TChannel]( System.ServiceModel.Channels.BindingParameterCollectionパラメーター)[0x00011] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel.Channels/Binding.cs:267 07-20 11:35:39.708 I/MonoDroid (1452):System.ServiceModel.ChannelFactoryを参照してください。

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory.cs:199 7月20日11にCreateFactory()[0x000ad] :35:39.708 I/MonoDroid(1452):System.ServiceModel.ChannelFactory.OnOpeningで()[0x00006]

/ユーザ/ビルダー/データ/レーン/ 52635947分の2923 /ソース/モノ/ MCS /クラス/中System.ServiceModel/System.ServiceModel/ChannelFactory.cs:383 7月20日11:35:39.708 I/MonoDroid(1452):System.ServiceModel.Channels.CommunicationObject.ProcessOpeningで()[0x00017]

に/ユーザー/ビルダー/データ/レーン/ 2923/52635947 /ソース/モノ/ mcs /クラス/システムm.ServiceModel/System.ServiceModel.Channels/CommunicationObject.cs:276 07-20 11:35:39.708 I/MonoDroid(1452):System.ServiceModel.Channels.CommunicationObject.Open(TimeSpanタイムアウト)[0x00000] in

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel.Channels/CommunicationObject.cs:169 07-20 11:35:39.708 I/MonoDroid(1452):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):at System.ServiceModel.ChannelFact ()[0x00058]

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

ユーザー/ビルダー/データ/レーン/ 2923/52635947/source /mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory_1.cs:108 07-20 11:35:39.708 I/MonoDroid(1452):System.ServiceModel.ClientBase`1 [TChannel] .CreateChannel() )[0x00000] in

/ユーザー/ builder/data/lanes/2923/52635947/source/mono/m 265 07-20 11:35:39.708 I/MonoDroid(1452):System.ServiceModel.ClientBase`1 [TChannel] .get_InnerChannel()[0x0000b]で、cs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs: ]

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:186 7月20日11:35:39.708 I/MonoDroid(1452):System.ServiceModel.ClientBase`1 [TChannel] .get_Channel()[0x00000] in

ユーザー/ builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:192 07-20 11:35:39.708 I/MonoDroid(1452):C:\ Users \ username \ docのDataServiceClient.GetProjects(Int32 firmaid)[0x00001]にあります。 Visual Studioの2015 \ umentsプロジェクト\ \ somethingMobileApp

\ somethingMobileAppAndroid DataService.cs \:10752 7月20日11:35:39.708 I/MonoDroid(1452):somethingMobileAppAndroid.MainActivity.OnCreateで(Android.OS.Bundleバンドル)[0x0006d] Cで:somethingMobileApp \ somethingMobileAppAndroid \ MainActivity.cs \プロジェクト

\のVisual Studio 2015 \ \ユーザー\ユーザー名\ドキュメント:50 7月20日11:35:39.708 D /モノ(1452):DLLIMPORT検索: '__Internal'( '(null)')。 07-20 11:35:39.712 D/Mono(1452): 'java_interop_jnienv_new_string'を検索しています。 07-20 11:35:39.712 D/Mono(1452):Probing 'java_interop_jnienv_new_string'。 07-20 11:35:39.712 D/Mono(1452): 'java_interop_jnienv_new_string'として見つかりました。 07-20 11:35:39.716 D/Mono(1452): '__Internal'( '(null)')で検索するDllImport。 07-20 11:35:39.716 D/Mono(1452): 'java_interop_jnienv_throw'を検索しています。 07-20 11:35:39.716 D/Mono(1452):Probing 'java_interop_jnienv_throw'。 07-20 11:35:39.716 D /モノ(1452): 'java_interop_jnienv_throw'として見つかりました。 未処理の例外が発生しました。

7月20日11:35:42.112 E/MONO(1452): 7月20日11:35:42.112 E/MONO(1452):未処理の例外: 7月20日11:35:42.112 E /モノ(1452):System.NotImplementedException:メソッドまたは操作が実装されていません。 07-20 11:35:42.112 E/mono(1452):at(ラッパー動的メソッド)System.Object:c637c172-2e79-4a17-a720-5e2325d945f7(intptr、intptr、intptr) 07-20 11:35 (intptr、intptr、intptr) mgmain JNI_OnLoad 07-20 11:35:42.112 E/mono(1452) 42.112 E/mono-rt(1452):[エラー]致命的な例外が発生しない例外:System.NotImplementedException:メソッドまたは操作が実装されていません。 07-20 11:35:42.112 E/mono-rt(1452):at(ラッパー動的メソッド)System.Object:c637c172-2e79-4a17-a720-5e2325d945f7(intptr、intptr、intptr) 07-20 11 :35:42.112 E/MONO-RT(1452):c637c172-2e79-4a17-a720-5e2325d945f7(のIntPtr、のIntPtr、のIntPtr)

任意の提案:(ネイティブに管理ラッパー)のSystem.Objectましたか? :)

+0

サービスurlとusername/Passordは実際のコードではokですが、一般的な文字列でマスクされています。 – Kenneth

+0

少なくとも、メソッドまたは操作が実装されていないエラーの例外からスタックトレースの行の最初の数を追加することをお勧めします。現時点では、どの特定の方法または操作が実際には欠落しているかについては言及していません。 –

+0

非常に良い点。私はオリジナルのポスト – Kenneth

答えて

0

表示されるエラーは、MonoとXamarin.AndroidでのWCF実装の現在の制限に起因する可能性があります。推測を行うためには、認証モードは、問題の核心が考えられます。BasicHttpSecurityMode.Transport

認証がサポートされています:BasicHttpSecurityMode.TransportWithMessageCredential
http://docs.xamarin.com/guides/cross-platform/application_fundamentals/web_services/#Calling_a_WCF_Service_with_Client_Credential_Security

認証は(まだ)ないサポート:
http://forums.xamarin.com/discussion/6493/wcf-basichttpbinding-with-transportwithmessagecredential-username-failure-ios-and-android

http://forums.xamarin.com/discussion/comment/44741/#Comment_44741から)

+0

に追加しますが、例外はclient.GetDataTestにあります。 – Kenneth

+0

私はこれがxamarinのような正しい答えだと思いますsystem.servicemodelは2.0.5.0で、コンソールアプリケーションのwindowsはsystem.servicemodelは4.0.0.0です。ドキュメントにはサポートされていると書かれていますが、 – Kenneth

0

xamarinドキュメントから:

クライアント資格情報セキュリティの使用 WCFサービスでは、サービスクライアントが資格情報を使用して認証する必要があります。 Xamarinプラットフォームは、クライアントがSOAPメッセージエンベロープ内で資格情報を送信できるようにするWS-Securityプロトコルをサポートしていません。ただし、Xamarinプラットフォームは、適切なClientCredentialTypeを指定することによって、HTTP基本認証資格情報をサーバーに送信する機能をサポートしています。

basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 次に、基本認証資格情報を指定することができます。

client.ClientCredentials.UserName.UserName = @ "foo"; client.ClientCredentials.UserName。パスワード= @ "mrsnuggles";で発見

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

は、ここでクライアント認証が

0

に実装されていることを示し、私は以前の答えが正しいものとしてマークする理由である答えがあります。

XamarinはTransportWithMessageCredentialをサポートしていません。 彼らはTransportCredentialOnlyをサポートしています。

BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential)サービスを呼び出すときにエラーが発生します。

問題は、MSDNは、TransportCredentialOnlyは、httpでプレーンテキストでユーザー名とパスワードを送信する際に注意して使用する必要があることを指摘しています。

私はxamarinがwcfとのより安全な通信方法を実装することを願っています。 TransportWithMessageCredentialやWSHTTPBINDINGなどです。

関連する問題