2012-05-12 5 views
0

WCFを使用してエンティティフレームワークからクエリを実行しましたが、私は電話クライアント側でデータを使用したいのですが、WCF関数の複数のデータ型をどのようにクエリできますか?複数のデータ型を返します

[OperationContract] 
string LoginUser(string email, string password); 

IService.cs

 public string LoginUser(string email, string password) 
    { 
     string query = @"SELECT VALUE tblUser FROM MyEntities.tblUsers AS tblUser WHERE tblUser.email = @email AND tblUser.password = @password"; 
     ObjectParameter[] parameters = new ObjectParameter[2]; 
     parameters[0] = new ObjectParameter("email", email); 
     parameters[1] = new ObjectParameter("password", password); 

     using (var context = new SteamKingEntities()) 
     { 
      ObjectQuery<string> results = context.CreateQuery<string>(query, parameters); 
      foreach (string result in results) 
      { 
       if (result != null) 
       { 
        return result; 
       } 
      } 
     } 
     return null; 
    } 

IService.svc.cs

 public Login() 
    { 
     InitializeComponent(); 
     _serviceClient = new Service1Client(); 
     _serviceClient.LoginUserCompleted += new EventHandler<LoginUserCompletedEventArgs>(_serviceClient_LoginUserCompleted); 

    } 

    private void loginBtn_Click(object sender, RoutedEventArgs e) 
    { 
     _serviceClient.LoginUserAsync(txtEmail.Text, txtPassword.Password); 
    } 

    private void _serviceClient_LoginUserCompleted(object sender, LoginUserCompletedEventArgs e) 
    { 

     if (e.Error == null && e.Result != null) 
     { 
      MessageBox.Show("Welcome " + e.Result + "!"); 
     } 
     else 
     { 
      MessageBox.Show(e.Error.Message + " Couldn't Login, Please try again =D"); 
     } 
    } 

Login.xaml.cs

私はEntity Frameworkのから表全体を返し、許可したいですWindow Phone側で一つずつ処理しています。

私はIService側にいくつかの変更を加える必要があると思いますが、私は真剣に電話開発に慣れていないし、Linq to SQLにも慣れていないのでわかりません。あなたは帰りのタイプのようなものを作る方法について私を案内してください。ありがとうございました。

更新

私はThere was an error while trying to deserialize parameter http://tempuri.org/:LoginUserResult. Please see InnerException for more details.

私はWCF Custom Objectに記載された方法にコードを修正したが、私はそれをデシリアライズできなかったを取得し、エラーが...私は推測する問題は、WP部から来ましたどうすれば結果を逆シリアル化できますか

+0

私はあなたがどのタイプを理解していないアリ返す – ivowiblo

+0

これは私が得るエラーです: 'WCFServiceWebRole1.tblUser'型から 'System.String'型への指定されたキャストは無効です。 – 1myb

+0

InnerExceptionには何がありますか?サービス参照を更新しましたか? – gabba

答えて

1

することができrefまたはあなたが使用することができますcustom-objects

+0

私は参考になりましたが、私は新しい問題を解決する方法を知っているかもしれませんか?返信 – 1myb

+0

のためのThx今私は私の電話が私がデータの特定のデータにデータの行を必要とするデータ型を読み取るように知らせることによって、電話の部分で何をすべきかわからない... – 1myb

1

あなたはデータコントラクトを使用する必要があります。サービスで

[DataContract] 
    public class ReturnType 
    { 
     [DataMember] 
     public string Name { get; set; } 

     [DataMember] 
     public string Pass { get; set; } 
    } 

それは次のようになります。

[OperationContract] 
    Entities.ReturnType[] SelectTopUser(int countOfTop); 

戻り値の型は、あなたが使用することができますエンティティフレームワークの種類

+0

私はUserDataという名前のクラスを作成し、作成しました。内部でデータ契約をしてから、私の操作契約を[OperationContract]に変更してください。 UserData LoginUser(文字列の電子メール、文字列のパスワード); まだそれを作ることができなかった... – 1myb

+0

また、クライアントコード(電話側)でサービス参照を更新する必要があります。あなたは何の困難を抱えていますか? – gabba

+0

今私は、私の電話でデータの種類を読み取って、データの行をデータで特定のデータに逆シリアル化することを知らせて、電話の部分で何をすべきかわからない... – 1myb

関連する問題