Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从WCF方法返回自定义类?_Wcf_Class_Windows Phone_Return_Custom Object - Fatal编程技术网

从WCF方法返回自定义类?

从WCF方法返回自定义类?,wcf,class,windows-phone,return,custom-object,Wcf,Class,Windows Phone,Return,Custom Object,关于这个问题有很多问题,但我的问题没有解决办法。我想返回一个自定义类,该类具有datacontract键,其成员具有datamember键。我在测试时遇到了这个错误 当我从windows phone应用程序调用它时,它返回未找到的远程服务器 它返回NotFound,但运行返回类型为void、bool和list的方法 [OperationContract] BaseModel Login(string userName, string password); 方法是 public Bas

关于这个问题有很多问题,但我的问题没有解决办法。我想返回一个自定义类,该类具有datacontract键,其成员具有datamember键。我在测试时遇到了这个错误

当我从windows phone应用程序调用它时,它返回未找到的远程服务器

它返回NotFound,但运行返回类型为void、bool和list的方法

 [OperationContract]
    BaseModel Login(string userName, string password);
方法是

public BaseModel Login(string userName, string password)
    {
        using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("SELECT * FROM UserBaseInformations WITH (NOLOCK) Where UserName=@userName", connection))
            {
                command.Parameters.Add(new SqlParameter("@userName", userName));
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = command;
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
                connection.Close();
                if (dt.Rows.Count == 0)
                    return new BaseModel() { IsSucceed = false, ErrorMessage = "Geçersiz bir kullanıcı adı girdiniz." };
                else if (!dt.Rows[0]["Password"].ToString().Equals(password))
                    return new BaseModel() { IsSucceed = false, ErrorMessage = "Şifrenizi yanlış girdiniz." };
                else
                    return new BaseModel()
                    {
                        IsSucceed = true,
                        ReturnObject = new UserModel()
                        {
                            Email = dt.Rows[0]["Email"].ToString(),
                            Password = dt.Rows[0]["Password"].ToString(),
                            UserID = (int)dt.Rows[0]["UserID"],
                            UserName = dt.Rows[0]["UserName"].ToString(),
                            SecurityQuestionID = (int)dt.Rows[0]["SecurityQuestionID"],
                            SecurityQuestionAnswer = dt.Rows[0]["SecurityQuestionAnswer"].ToString()
                        }
                    };
            }
        }
    }
我找到了解决办法

返回对象类型在WCF中可能是个问题,所以我将其更改为用于返回类的基类,并将KnownType属性添加到BaseModel中

[DataContract]
public class BaseModel
{
    private string errorMessage;
    [DataMember]
    public string ErrorMessage
    {
        get { return errorMessage; }
        set { errorMessage = value; }
    }

    private string informationMessage;
    [DataMember]
    public string InformationMessage
    {
        get { return informationMessage; }
        set { informationMessage = value; }
    }

    private string warningMessage;
    [DataMember]
    public string WarningMessage
    {
        get { return warningMessage; }
        set { warningMessage = value; }
    }

    private string succeedMessage;
    [DataMember]
    public string SucceedMessage
    {
        get { return succeedMessage; }
        set { succeedMessage = value; }
    }

    private object returnObject;
    [DataMember]
    public object ReturnObject
    {
        get { return returnObject; }
        set { returnObject = value; }
    }

    private bool isSucceed;
    [DataMember]
    public bool IsSucceed
    {
        get { return isSucceed; }
        set { isSucceed = value; }
    }
}
public BaseModel Login(string userName, string password)
    {
        using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString))
        {
            connection.Open();
            using (SqlCommand command = new SqlCommand("SELECT * FROM UserBaseInformations WITH (NOLOCK) Where UserName=@userName", connection))
            {
                command.Parameters.Add(new SqlParameter("@userName", userName));
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = command;
                DataTable dt = new DataTable();
                adapter.Fill(dt);
                DataSet ds = new DataSet();
                ds.Tables.Add(dt);
                connection.Close();
                if (dt.Rows.Count == 0)
                    return new BaseModel() { IsSucceed = false, ErrorMessage = "Geçersiz bir kullanıcı adı girdiniz." };
                else if (!dt.Rows[0]["Password"].ToString().Equals(password))
                    return new BaseModel() { IsSucceed = false, ErrorMessage = "Şifrenizi yanlış girdiniz." };
                else
                    return new BaseModel()
                    {
                        IsSucceed = true,
                        ReturnObject = new UserModel()
                        {
                            Email = dt.Rows[0]["Email"].ToString(),
                            Password = dt.Rows[0]["Password"].ToString(),
                            UserID = (int)dt.Rows[0]["UserID"],
                            UserName = dt.Rows[0]["UserName"].ToString(),
                            SecurityQuestionID = (int)dt.Rows[0]["SecurityQuestionID"],
                            SecurityQuestionAnswer = dt.Rows[0]["SecurityQuestionAnswer"].ToString()
                        }
                    };
            }
        }
    }