快速背景信息:
有一个带有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 / Mono(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.CreateSecurityBindingElement()[0x00025]中
/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 firmaid)[0x00001]
\ somethingMobileAppAndroid \ DataService.cs:10752
07-20 11:35:39.708 I / MonoDroid(1452):在C:\ Users \ username \ documents \ visual studio 2015 \ Projects中的移动应用Android.MainActivity.OnCreate(Android.OS.Bundle bundle)[0x0006d]
\ 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):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:42.112 E / mono(1452):at(wrapper native-to-managed)System.Object:c637c172-2e79-4a17-a720-5e2325d945f7(intptr,intptr,intptr)
在mgmain JNI_OnLoad中
07-20 11:35: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):at(wrapper native-to-managed)System.Object:c637c172-2e79-4a17-a720-5e2325d945f7(intptr,intptr,intptr)
有什么建议吗? :)
最佳答案
您看到的错误很可能是由于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)
关于c# - Xamarin WCF BasicHttpBinding-未实现方法或操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38478079/