2011-12-29 17 views
1

HTTPで公開されている単純なWCFサービスのMonoTouchクライアントを実装している間に、私は次のようなメッセージを表示しています:InvalidOperationExceptionSystem.ServiceModel.ClientBaseをオーバーライドしようと苦労しています.CreateChannel()

MonoTouchでは、動的プロキシコード生成をサポートしていません。このメソッドまたはその呼び出し元をオーバーライドして、特定のクライアントプロキシインスタンスを返します。

これはthis fileの141行目からのものです。

CreateChannel()System.ServiceModel.ClientBase<T>私自身のClientBaseのサブクラスで、動的コード生成を使用しない実装をオーバーライドする必要があります。このメソッドは、Tのインスタンスを返します。

私のサービスクライアントの新しいインスタンスを返すと、はUnable to cast object of type 'MyServiceClient' to type 'System.ServiceModel.IClientChannel'の例外をInnerChannelのゲッターにスローします。

私はこの時点からどのように進めるべきか明確なアイデアはありません。

答えて

0

これは非常にシンプルなインターフェイスだった - ので、私はちょうど、コードの約10行を完全に働いたとしたSystem.Net.WebClient、に基づいて単純なクライアントを書きました。

+0

私は同じ問題を抱えていますが、これを解決するためのサンプルコードを提供できますか?ありがとうございました。 – Neal

+0

WebClient(http://msdn.microsoft.com/en-us/library/system)を使用する単純なコードを使用して、Wiresharkを起動してワイヤで何が起こるかを確認し、サービス用の単純なデスクトップクライアントを構築するだけです。 .net.webclient(v = vs.100).aspx)を簡単な方法で使用します。このコードをMonoTouchソリューションのどこかに隠しておき、最終的にMonoTouch上で適切に動作させるときは、WebClientベースの実装を適切なものに置き換えてください。 – tomfanning

0

ソースから、フレームワークはリフレクション経由で自分のチャンネルの新しいインスタンスを作成することができないように見えますので、それはあなたがメソッドを自分で上書きが必要です。

WCFインフラの多くは、主に起因する(あなたは配管や背中を進めてきた後にのみ意味があります)ジェネリック医薬品のその異常な使用に、非自明です。この場合、CreateChannel()によって返されたチャンネルはでなければなりません(会話のクライアント側にいるため)IClientChannelになる必要があります。このインターフェイスがチャンネルに存在することを確認してください。エラーがなくなるはずです(別の問題に置き換えられる可能性があります)。

+0

あなたはより多くの援助を必要とする場合、CreateChannel 'のオーバーライドを投稿()' –

+0

実装IClientChannelは悪夢のように見えます。私は2.0スタイルのWeb Referenceを作成することに切り替えました。そこからどこに行くのか見ていきましょう。 – tomfanning

+0

通常は独自のチャンネルを作成しません(WCFでサポートされていない非常に特殊なことをしない限り)。 WCFライブラリによって既に提供されているチャネルのみを構築してください。チャネルのタイプと構成の選択は難しい部分です。 –

関連する問題