コールバックを使用してWCFサービスを設計していますが、コールバック関数の実装が呼び出されることはありません。私は生成されたサービスプロキシについて混乱しています。だから助けてください。WCFコールバック実装関数が呼び出されない
ここでは、サーバー側でサービスインターフェイスIMyServiceとコールバックインターフェイスIMyServiceCallbackを定義し、サーバープロジェクトでIMyServiceも実装しました。サーバープロジェクトのほかに、確かに別のクライアントプロジェクトがあります。これにVSのサービスリファレンスを追加しました。そして私はクライアント側でIMyServiceCallbackインターフェイスを実装しました。ここで問題が発生します:私はそれをデバッグしているときに、関数はIMyServiceCallbackの実装に入ることはありません。もちろん、望む結果は決して出てこないのです。
これは私が混乱しているところです。クライアント側でサービス参照を追加すると、実際にはIMyService、IMyServiceCallback、IMyServiceChannelとクライアントプロキシクラスの3つのインタフェースがローカルで生成されました。 IMyServiceCallbackのローカル実装では、サービス側のIMyServiceCallbackインタフェースではなく、ローカルIMyServiceCallbackインタフェースを実装するようにクラスを宣言しました。これが問題だろうか?異なるプロジェクト(したがって異なる名前空間)の下でインタフェースが2つ宣言されるのはなぜですか?クライアントサイドインターフェイスを実装する理由は、サーバーサイドインターフェイスから実装した場合、サービスを呼び出そうとしたときに、「ChannelFactoryに提供されたInstanceContextにCallbackContractTypeエラーを実装していないUserObjectが含まれています。もう一つの混乱する部分は、IMyCallbackなどのコールバックインターフェイス名をIMyServiceCallbackの代わりに宣言するとサーバー側で生成されたクライアント側のインターフェイスはIMyServiceCallbackになります。これはサービスインターフェイスの名前に加えて接尾辞 "コールバック"。そして、この状況で私はまた、 "ChannelFactoryに提供されたInstanceContextにCallbackContractTypeエラーを実装していないUserObjectが含まれています"を得ました。
「サービス参照の追加」について誤解されていると思いますが、実装するインタフェースをどのように実装する必要がありますか。誰か助けてくれますか?ありがとう!
更新日:
何とか問題を解決しました。まず、2つの宣言がうまくいくことが望まれます。ローカルクライアントは、サービス参照を追加するときに生成されるローカルインタフェースを実装する必要があります。私の問題は、私もDataContractを定義したが、生成された参照ファイルにはそれがないということでした。これは、サービスプロジェクトのアセンブリを参照として追加したためです(この場合、サービス参照を追加するとDatacontractは生成されません)。またはDataMember属性が不足しています。しかし、とにかく、私は両方の部分を修正した後、機能は今働いている。
お返事ありがとうございます。元の投稿の更新について述べたように、私は今、ローカルインターフェースの宣言が望ましいことに気付きました。そして、私は "あなたが書いていないサービスを消費しているかもしれないし、サービスのソースコードにアクセスできない"という意味になります。私の問題は、クライアント側で誤って生成されていない1つのDataContract宣言にあったと思います。 – tete