私はC#とWCFを初めて使用し、Javaのバックグラウンドを持っています。
Employeeクラスとメソッドを持つIISでホストされているWCFサービスを使用したソリューションがあります...
public Employee getEmployee(int loginId)
このメソッドはloginIdを受け取り、データベースにクエリを実行し、結果を使用してEmployeeオブジェクトを作成してから、Employeeオブジェクトを返します。十分に単純です。
だから私にはクライアントがいて、これまでのところ、単純な「Hello World」Webメソッドを呼び出して、サービスと通信するように構成されていることを証明するだけです。ここで、ログインボタンで入力されたloginIdを取得し、getEmployeeを呼び出して、戻り値を使用してローカルのEmployeeオブジェクトを作成します。
それで、クライアントでEmployeeクラスをどのように定義する必要があるかという点で混乱していますか?こんなに簡単なことをする方法については、たくさんの情報はありません。AXIS2やNetBeansforJavaの場合と同様に、これは非常に簡単で、その方法を示すチュートリアルがたくさんありますが、WCFの場合、すべてのチュートリアルは、私が持っていない特定の知識を前提としているようです。
したがって、以下の投稿では、Employeeクラスを別のアセンブリで定義し、WCFサービスプロジェクトとクライアントプロジェクトの両方から.dllを参照することでこれを実行できると述べています(ちなみに、どちらも別のソリューションにあります)。
WCFがカスタムオブジェクトをクライアントに渡し、そのメソッドを実行する
「コントラクトアセンブリ(独自のロジックを追加できるシンドメインモデル(Personなど)を含むアセンブリ)を作成できます」と書かれていますが、これを行う方法や、私がどこに言及しているかについては説明していません。詳細情報や手順を見つけることができます。
とにかく、私のEmployeeクラスはすでにWCFサービスプロジェクトで直接定義されています。誰かがそれを「契約アセンブリ」に移動する方法について情報を提供できれば(私はC#noobであり、これまでDLLを作成したことがなく、Windowsフォームプロジェクトだけです)、それは大いにありがたいことです。
また、同じ投稿の別の回答で次のように見えます...
「1.dllのソースを変更できず、dllのパブリックメソッドを呼び出したい場合は、リフレクションを使用することをお勧めします。したがって、WCFからオブジェクトを受け取り、返された値でPersonプロパティを設定し、メソッドを呼び出します。」
上記の概念を理解しています。クライアントで別のEmployeeクラスを定義し、リフレクションを使用してWebメソッドが返すオブジェクトから値を取得し、それらを新しいEmployeeオブジェクトに割り当てます。ただ、リフレクションを使用してその値を取得する方法がわかりません。
ベストプラクティスは何ですか?この他の投稿が示唆するようにIEmployeeインターフェイスを定義し、それを通常のEmployeeクラスのDLLに入れて、サーバーとクライアントの両方から参照し、WebメソッドからEmployeeではなくIEmployeeを返す必要がありますか?それが最善の方法である場合、実行する必要のある特別なことはありますか、またはそのようなDLLが両側の参照である限り、文字通りこのようなことを行うことができますか?
int loginId = Int32.Parse(this.loginInputTxt.Text);
LaborService.LaborServiceClient proxy = new LaborService.LaborServiceClient();
Employee emp = (Employee)proxy.getEmployee(loginId);