gpt4 book ai didi

android - Xamarin Android - 使用复杂参数(对象)发出 Rest 请求会引发异常,在 .NET 中它工作正常(使用 channel 工厂)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:18 25 4
gpt4 key购买 nike

我开始为 Android 使用 mono droid 或 Xamarin,因此,我的想法是重用我已经在 .NET 中使用的大部分代码。

我需要我的 android 和 ios 应用程序做的一件事是调用使用 wcf rest 和 json 编码提供的 Web 服务。

所以我的代码很简单:

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

足够简单让我开始(至少,这是我对单声道的想法,在 .net 中重用单声道)

但是当我运行这段代码时,我得到以下异常异常:

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

我在 .NET 4.5 应用程序中使用了完全相同的代码,它运行良好,似乎在将对象转换为字符串(我想是 json 字符串)时失败了。

既然它在 .NET 中工作,它是否应该直接在单声道中工作?

你们有复杂输入对象的服务吗?您使用什么 API 进行这些调用?

非常感谢您的帮助,

路易斯·皮尼奥

最佳答案

它不起作用,因为您的代码中使用的某些对象尚未移植到 Mono,因为它们是 Microsoft 特定的。这里有一些信息: Mono Class Status

例如,您的代码中用于 ISecurityManagement 的命名空间 Microsoft.EnterpriseManagement 可能永远不会被移植。

要在 Mono 或 .Net 上工作,您的代码必须遵循 .NET standard .协调 Mono、.Net 和 .Net Core 框架的工作正在进行中,这样他们就可以编译具有更少代码差异的通用库和程序。

关于android - Xamarin Android - 使用复杂参数(对象)发出 Rest 请求会引发异常,在 .NET 中它工作正常(使用 channel 工厂),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17856291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com