2013-07-25 5 views
5

Android用のモノドロイドまたはXamarinを使用し始めています。既に.NETで使用しているほとんどのコードを再利用します。Xamarin Android - 複雑なパラメータ(オブジェクト)でRestをリクエストすると例外がスローされます.NETでうまく動作します(チャンネルファクトリを使用)

私のアンドロイドとiosアプリケーションで必要なことの1つは、jsonエンコーディングでwcf restを使用して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を使用しますか?すべてのあなたの助けを控え

おかげで、彼らはマイクロソフト固有のものですので、あなたのコード内で使用されるオブジェクトのいくつかはモノに移植されていませんので、それは動作しません

ルイスPinho

+1

この問題を解決しましたか?私は一歩前進することができない同じ問題に直面しています。これについての情報はありませんあなたは何か考えがあれば助けてください。 – dafodil

+0

同様の問題がここに記述されています:https://stackoverflow.com/questions/44650314/mono-rest-service-not-supporting-post-method – Hcorg

+0

これは2013年からの質問ですか? –

答えて

0

。いくつかの情報がここにあります: Mono Class Status

例えば、あなたのコードでISecurityManagementのために使用されるこの名前空間Microsoft.EnterpriseManagementはおそらく移植されることはありません。

Monoまたは.Netで作業するには、コードを.NET standardに従わなければなりません。 Mono、.Net、.Net Coreフレームワークを調和させる作業が進んでおり、コードの違いが少ない共通ライブラリとプログラムをコンパイルすることができます。

+0

エラーは 'ISecurityManagement'既に移植されたクラス。 – Hcorg

+0

こんにちはJimbot、その名前空間はオブジェクトで直接使用されませんでした(私はその名前空間を使用する方法を知っていますか?)、私たちはMicrosoftエンタープライズライブラリのロギングを使用していたので、 – lpinho

+0

私はこのインターフェイスを知らなかったのでMSDNのISecurityManagementを探しています。この名前空間に含まれています – Jimbot

関連する問題