2017-05-08 7 views
0

私は2つのWCFサービスをクライアントに接続しています。サービス#1から取得したユーザオブジェクトを使用し、これをサービス#2のパラメータとして使用したいとします。2つのサービスを持つWCF/MVCプロジェクトで「共有」型を使用する(「変換できません...」)

private readonly GCTournamentServiceClient _tournamentClient = new GCTournamentServiceClient(); 

    public ActionResult Join(int id) 
    { 
     GCUserServiceClient userClient = new GCUserServiceClient(); 

     // Get current user 
     var currentUser = userClient.GetUser(0); 

     if (currentUser != null) 
     { 
      // Get selected tournament 
      var selectedTournament = _tournamentClient.GetTournament(id); 

      // Check if there are available seats in the tournament 
      if (selectedTournament.Seats > selectedTournament.RegistredUsers.Count) 
      { 
       // Check if user exist amoung registred users 
       if (!selectedTournament.RegistredUsers.Contains(currentUser)) 
       { 
        selectedTournament?.RegistredUsers.Add(currentUser); 
       } 
      } 
     } 
    } 

エラーVisual Studioは私を求める:ここに私のMVC-コントローラTournamentController.csコードがある

Argument 1: cannot convert from 'GConnect.Clients.WebClient.GCUserService.User' to 'GConnect.Clients.WebClient.GCTournamentService.User' 

だから、問題は、型GCUserService.Userを有し、currentUserです。 RegistredUsers

このエラー自体は完全に意味がありますが、私はこのタイプを(正しく)どのように変換しようとしているのかよく分かりません。一部の記事では、ユーザータイプを保持する「共有」サービスを作成する必要があると述べています。私は、そのような解決策が必要であると信じることはできません。

私はここでいくつかの基本的なことを誤解しているかもしれませんが(WCFとMVCで働いています)、私に教えてください。

答えて

0

問題は、GCUserService.UserタイプのcurrentUserです。 私はこの問題を解決するための2つのアプローチがありRegistredUsers

のためのパラメータとしてこれを使用することができないよ:

1) クラスライブラリプロジェクト(Visual Studioの)を作成し、Userクラスを追加しますが、そのプロジェクトをコンパイルし、サービスとクライアント(MVCアプリケーション)の両方にアセンブリの(.dll)参照を追加します。あなたはすでにそれを

var currentUser = userClient.GetUser(0); 

を行っているとして、次のそのユーザオブジェクトを取得GETUSERは、上記の提案のように、参照として追加された別のアセンブリで定義されているUserの種類を返します。 TournamentServiceも同じアセンブリを参照し、RegistredUsers.Add(User userToadd)メソッドは同じUserオブジェクトをとり、WCFランタイムはそれをシリアル化/滅菌できるはずです。あなたのMVCのクライアントアプリケーション、TournamentService.RegistredUsers.Add法によって許容されるまで、新しいUserオブジェクトで

2)currentUserからプロパティを移入し、そのオブジェクトをパラメータとしてRegistredUsers.Addメソッドに渡します。

ベストプラクティス

理想的には、私はより多くの仕事である第一のアプローチが、より良い練習とあなたのUserクラスが集中管理されたコードを再利用していることをお勧めします。

希望すると便利です。

関連する問題