2

簡単な背景情報: BasicHttpBinding を使用する認証付きの wcf があります。Dataservice.cs には、(svcutil を使用して生成された) サービス メタデータに基づく dataserviceclient が含まれています。

最初にコードを使用してコンソール アプリを作成し、それが完全に機能した後、xamarin android プロジェクトを作成しました。コードをコピーしました。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): DllImport 検索: '/system/lib/liblog.so' ('/system/lib/liblog.so')。07-20 11:35:39.704 D/Mono (1452): 「__android_log_print」を検索しています。07-20 11:35:39.704 D/モノ (1452): '__android_log_print' を調べます。07-20 11:35:39.704 D/Mono (1452): 「__android_log_print」として見つかりました。07-20 11:35:39.708 I/MonoDroid(1452): 未処理の例外: 07-20 11:35:39.708 I/MonoDroid(1452): System.NotImplementedException: メソッドまたは操作が実装されていません。07-20 11:35:39.708 I/MonoDroid (1452): System.ServiceModel.BasicHttpBinding で。

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/BasicHttpBinding_4_5.cs:125 07-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 07-20 11:35:39.708 I/MonoDroid(1452) : System.ServiceModel.Channels.Binding.CreateContext (System.ServiceModel.Channels.BindingParameterCollection パラメーター) [0x00000] で

/Users/builder/data/lanes/2923/52635947/source/mono/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] で

/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) : System.ServiceModel.ChannelFactory.CreateFactory () [0x000ad] で

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

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ChannelFactory.cs:383 07-20 11:35:39.708 I/MonoDroid(1452): でSystem.ServiceModel.Channels.CommunicationObject.ProcessOpening () [0x00017] で

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/CommunicationObject.cs:276 07-20 11:35:39.708 I/MonoDroid(1452) : System.ServiceModel.Channels.CommunicationObject.Open (TimeSpan タイムアウト) [0x00000] で

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels/CommunicationObject.cs:169 07-20 11:35:39.708 I/MonoDroid(1452) : System.ServiceModel.Channels.CommunicationObject.Open () [0x00000] で

/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) : System.ServiceModel.ChannelFactory.EnsureOpened () [0x00058] で

/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): でSystem.ServiceModel.ChannelFactory`1[TChannel].CreateChannel () [0x00000] で

/Users/builder/data/lanes/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] で

/Users/builder/data/lanes/2923/52635947/source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:266 07-20 11:35:39.708 I/MonoDroid(1452): でSystem.ServiceModel.ClientBase`1[TChannel].get_InnerChannel () [0x0000b] で

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

/Users/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\documents\visual studio 2015\Projects\somethingMobileApp の DataServiceClient.GetProjects (Int32 ファームエイド) [0x00001]

\somethingMobileAppAndroid\DataService.cs:10752 07-20 11:35:39.708 I/MonoDroid(1452): somethingMobileAppAndroid.MainActivity.OnCreate (Android.OS.Bundle バンドル) [0x0006d] で C:\Users\username\documents\ビジュアル スタジオ 2015\プロジェクト

\somethingMobileApp\somethingMobileAppAndroid\MainActivity.cs:50 07-20 11:35:39.708 D/Mono (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): '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): DllImport 検索: '__Internal' ('(null)')。07-20 11:35:39.716 D/Mono (1452): 「java_interop_jnienv_throw」を検索しています。07-20 11:35:39.716 D/Mono (1452): 'java_interop_jnienv_throw' を調べています。07-20 11:35:39.716 D/Mono (1452): 「java_interop_jnienv_throw」として見つかりました。未処理の例外が発生しました。

07-20 11:35:42.112 E/mono (1452): 07-20 11:35:42.112 E/mono (1452): 未処理の例外: 07-20 11:35:42.112 E/mono (1452): システム。 NotImplementedException: メソッドまたは操作が実装されていません。07-20 11:35:42.112 E/モノ (1452): (ラッパー動的メソッド) System.Object:c637c172-2e79-4a17-a720-5e2325d945f7 (intptr、intptr、intptr) 07-20 11:35:42.112 E/mono (1452): (ラッパー ネイティブからマネージド) System.Object:c637c172-2e79-4a17-a720-5e2325d945f7 (intptr,intptr,intptr) In mgmain JNI_OnLoad 07-20 11:35:42.112 E/mono -rt (1452): [エラー] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: メソッドまたは操作が実装されていません。07-20 11:35:42.112 E/mono-rt (1452): (ラッパー動的メソッド) System.Object:c637c172-2e79-4a17-a720-5e2325d945f7 (intptr、intptr、intptr) 07-20 11:35 :42.112 E/mono-rt (1452):

なにか提案を ?:)

4

3 に答える 3

1

表示されているエラーは、Mono および Xamarin.Android での WCF 実装の現在の制限が原因である可能性があります。推測すると、認証モードが問題の核心である可能性があります。

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

認証BasicHttpSecurityMode.TransportWithMessageCredentialは (まだ) サポートされていません:
http://forums.xamarin.com/discussion/6493/wcf-basichttpbinding-with-transportwithmessagecredential-username-failure-ios-and-android

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

于 2016-07-20T16:29:25.350 に答える
0

これが答えです。これが、以前の答えを正しいとマークした理由です。

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

BasicHttpBinding(BasicHttpSecurityMode.TransportWithMessageCredential) サービスの呼び出し時にエラーを返します。

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

xamarin が wcf と対話するためのより安全な方法を実装することを願っています。TransportWithMessageCredential や WSHTTPBINDING など。

于 2016-07-21T20:33:11.033 に答える
0

xamarin のドキュメントから:

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

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

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

https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/#wcfにあります。

クライアント認証が実装されていることを示します

于 2016-07-20T17:05:13.250 に答える