Fork me on GitHub

写WCF,VS需要一管理员身份呢启动,否则服务无法访问。

model层

using System;
using System.Runtime.Serialization;

namespace MyModel
{
    [DataContract]
    public class User
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public string UserName { get; set; }
        [DataMember]
        public string Password { get; set; }
        [DataMember]
        public string Truename { get; set; }
        [DataMember]
        public string Sex { get; set; }
        [DataMember]
        public DateTime Birthday { get; set; }
        [DataMember]
        public string Phone { get; set; }
        [DataMember]
        public string Email { get; set; }
        [DataMember]
        public DateTime CreateTime { get; set; }
    }
}
using System.Runtime.Serialization;

namespace MyModel
{
    [DataContract]
    public class FaultMessage
    {
        [DataMember]
        public string Message { get; set; }
        [DataMember]
        public string ErrorCode { get; set; }
    }
}

dao层

using MyDao.ModelRecords;

namespace MyDao.Interface
{
    public interface IUserDao
    {
        int Insert(UserRecord user);
        void Delete(int id);
        void Update(UserRecord user);
        UserRecord GetUserById(int id);
    }
}

 

using MyDao.Interface;
using MyDao.ModelRecords;
using MyUtil;

using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;

namespace MyDao
{
    public class UserDao : IUserDao
    {
        //private UserDao() 
        //{
        //    //:Empty
        //}

        //private static UserDao userDao = new UserDao();

        //public static UserDao Instance()
        //{
        //    return userDao;
        //}
        public int Insert(UserRecord user)
        {
            int id = 0;
            SqlParameter[] parameters=new SqlParameter[7];
            parameters[0] = new SqlParameter(Constants.USERNAME, user.UserName);
            parameters[1] = new SqlParameter(Constants.PASSWORD, user.Password);
            parameters[2] = new SqlParameter(Constants.TRUENAME, user.Truename);
            parameters[3] = new SqlParameter(Constants.SEX, user.Sex);
            parameters[4] = new SqlParameter(Constants.BIRTHDAY, user.Birthday);
            parameters[5] = new SqlParameter(Constants.PHONE, user.Phone);
            parameters[6] = new SqlParameter(Constants.EMAIL, user.Email);
            id=Convert.ToInt32(MySqlHelper.ExecuteScalar(MySqlHelper.GetConnecting(),CommandType.StoredProcedure,Constants.INSERT_USER_RETURN_ID,parameters),CultureInfo.InvariantCulture);

            return id;
        }

        public void Delete(int id)
        {
            SqlParameter[] parameters = new SqlParameter[1];
            parameters[0] = new SqlParameter(Constants.ID, id);
            MySqlHelper.ExecuteNonQuery(MySqlHelper.GetConnecting(), CommandType.StoredProcedure, Constants.DELETE_USER_BY_ID, parameters);
        }

        public void Update(UserRecord user)
        {
            SqlParameter[] parameters = new SqlParameter[2];
            parameters[0] = new SqlParameter(Constants.ID, user.Id);
            parameters[1] = new SqlParameter(Constants.PASSWORD, user.Password);
            MySqlHelper.ExecuteNonQuery(MySqlHelper.GetConnecting(), CommandType.StoredProcedure, Constants.DELETE_USER_BY_ID, parameters);
        }

        public UserRecord GetUserById(int id)
        {
            UserRecord user = new UserRecord();
            SqlParameter[] parameters = new SqlParameter[1];
            parameters[0] = new SqlParameter(Constants.ID, id);
            DataTable dt = MySqlHelper.ExecuteDataTable(MySqlHelper.GetConnecting(), CommandType.StoredProcedure, Constants.GTE_USER_BY_ID, parameters);

            foreach (DataRow dr in dt.Rows)
            {
                DataRowConvertToUser(dr, user);
            }

            return user;
        }

        public void DataRowConvertToUser(DataRow dr, UserRecord user)
        {
            user.Id = int.Parse(dr[Constants.M_ID].ToString(), CultureInfo.InvariantCulture);
            user.UserName = dr[Constants.M_USERNAME].ToString();
            user.Password = dr[Constants.M_PASSWORD].ToString();
            user.Truename = dr[Constants.M_TRUENAME].ToString();
            user.Sex = dr[Constants.M_SEX].ToString();
            user.Birthday = Convert.ToDateTime(dr[Constants.M_BIRTHDAY], CultureInfo.InvariantCulture);
            user.Phone = dr[Constants.M_PHONE].ToString();
            user.Email = dr[Constants.M_EMAIL].ToString();
            user.CreateTime = Convert.ToDateTime(dr[Constants.M_CREATE_TIME], CultureInfo.InvariantCulture);
        }
    }
}
namespace MyDao
{
    public class Constants
    {
        #region stored procedure field
        public const string ID = "@id";
        public const string USERNAME = "@userName";
        public const string PASSWORD = "@password";
        public const string TRUENAME = "@trueName";
        public const string SEX = "@sex";
        public const string BIRTHDAY = "@birthday";
        public const string PHONE = "@phone";
        public const string EMAIL = "@email";
        #endregion

        #region stored procedure name
        public const string INSERT_USER_RETURN_ID = "InsertUserReturenId";
        public const string DELETE_USER_BY_ID = "DeleteUserById";
        public const string UPDATE_USER = "UpdateUser";
        public const string GTE_USER_BY_ID = "GetUserById";
        #endregion

        #region user field
        public const string M_ID = "ID";
        public const string M_USERNAME = "UserName";
        public const string M_PASSWORD = "Password";
        public const string M_TRUENAME = "TrueName";
        public const string M_SEX = "Sex";
        public const string M_BIRTHDAY = "Birthday";
        public const string M_PHONE = "Phone";
        public const string M_EMAIL = "Email";
        public const string M_CREATE_TIME = "CreateTime";
        #endregion
    }
}
using System;

namespace MyDao.ModelRecords
{
    public class UserRecord
    {
        public int Id { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public string Truename { get; set; }
        public string Sex { get; set; }
        public DateTime Birthday { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
        public DateTime CreateTime { get; set; }
    }
}

manager层

拓展方法

using MyDao.ModelRecords;
using MyModel;

namespace MyManager
{
    public static class RecordUser
    {
        public static User ConvertToUser(this UserRecord userRecord)
        {
            User user = new User();
            user.Id = userRecord.Id;
            user.UserName = userRecord.UserName;
            user.Password = userRecord.Password;
            user.Truename = userRecord.Truename;
            user.Sex = userRecord.Sex;
            user.Birthday = userRecord.Birthday;
            user.Phone = userRecord.Phone;
            user.Email = userRecord.Email;
            user.CreateTime = userRecord.CreateTime;

            return user;
        }

        public static UserRecord ConvertToUserRecord(this User user)
        {
            UserRecord userRecord = new UserRecord();
            userRecord.Id = user.Id;
            userRecord.UserName = user.UserName;
            userRecord.Password = user.Password;
            userRecord.Truename = user.Truename;
            userRecord.Sex = user.Sex;
            userRecord.Birthday = user.Birthday;
            userRecord.Phone = user.Phone;
            userRecord.Email = user.Email;
            userRecord.CreateTime = user.CreateTime;

            return userRecord;
        }
    }
}
using MyDao;
using MyDao.Interface;
using MyManager.Interface;
using MyModel;

namespace MyManager
{
    public class UserManager : IUserManager
    {
        private IUserDao userDao = new UserDao();

        public int Insert(User user)
        {
            int id= userDao.Insert(user.ConvertToUserRecord());

            return id;
        }

        public void Delete(int id)
        {
            userDao.Delete(id);
        }

        public void Update(User user)
        {
            userDao.Update(user.ConvertToUserRecord());
        }

        public User GetUserById(int id)
        {
           return  userDao.GetUserById(id).ConvertToUser();
        }
    }
}

contract层

using MyModel;

using System.ServiceModel;

namespace MyContract
{
    [ServiceContract(Name = "UserService", Namespace = "http://www.artech.com/")]
    public interface UserContract
    {
        [OperationContract]
        [FaultContract(typeof(FaultMessage))]
        int Insert(User user);

        [OperationContract]
        [FaultContract(typeof(FaultMessage))]
        void Delete(int id);

        [OperationContract]
        [FaultContract(typeof(FaultMessage))]
        void Update(User user);

        [OperationContract]
        [FaultContract(typeof(FaultMessage))]
        User GetUserById(int id);
    }
}

service层:

using MyContract;
using MyManager;
using MyManager.Interface;
using MyModel;

using System;
using System.ServiceModel;

namespace MyServices
{
    public class UserService : UserContract
    {
        private IUserManager userManager = new UserManager();

        public int Insert(User user)
        {
            int id = 0;
            try
            {
                id = userManager.Insert(user);
            }
            catch (Exception ex)
            {
                throw new FaultException<FaultMessage>(new FaultMessage { ErrorCode = "insert", Message = ex.Message });
            }

            return id;
        }

        public void Delete(int id)
        {
            try
            {
                userManager.Delete(id);
            }
            catch (Exception ex)
            {
                throw new FaultException<FaultMessage>(new FaultMessage { ErrorCode = "delete", Message = ex.Message });
            }
        }

        public void Update(User user)
        {
            try
            {
                userManager.Update(user);
            }
            catch (Exception ex)
            {
                throw new FaultException<FaultMessage>(new FaultMessage { ErrorCode = "update", Message = ex.Message });
            }
        }

        public User GetUserById(int id)
        {
            try
            {
                return userManager.GetUserById(id);
            }
            catch (Exception ex)
            {
                throw new FaultException<FaultMessage>(new FaultMessage { ErrorCode = "getUserById", Message = ex.Message });
            }
        }
    }
}

运行main

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="MyRole" connectionString="Data Source=.;Initial Catalog=Role;User ID=sa;Password=sa"/>
  </connectionStrings>
  <system.serviceModel>
    <services>
      <service name="MyServices.UserService" behaviorConfiguration="behaviorUserService">
        <host>
          <baseAddresses>
            <add baseAddress = "http://127.0.0.1:9999/UserService" />
          </baseAddresses>
        </host>
        <endpoint address ="UserService" binding="wsHttpBinding" contract="MyContract.UserContract" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="behaviorUserService">
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>
using MyServices;
using System;
using System.ServiceModel;

namespace MyTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (ServiceHost host = new ServiceHost(typeof(UserService)))
            {
                host.Opened += delegate
                {
                    Console.WriteLine("UserService已经启动,按任意键终止服务!");
                };

                host.Open();
                Console.Read();
            }
        }
    }
}

客户端程序:

配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint address="http://127.0.0.1:9999/UserService/UserService" binding="wsHttpBinding" contract="MyContract.UserContract" name="userService" />//这个地方需要注意,address与上面不同,它自动多加了一个UserService
</client> </system.serviceModel> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>

service层:

using MyContract;
using MyModel;
using System.ServiceModel;

namespace MyClientServics
{
    public class UserServiceClient
    {
        ChannelFactory<UserContract> channelFactory = new ChannelFactory<UserContract>("userService");
        public int Insert(User user)
        {
            UserContract proxy = channelFactory.CreateChannel();
            int id = 0;
            id = proxy.Insert(user);
            return id;
        }

        public void Delete(int id)
        {
            //ChannelFactory<UserContract> channelFactory = new ChannelFactory<UserContract>("userService");
            UserContract proxy = channelFactory.CreateChannel();//这句话必须放在方法里面,否则报错
            proxy.Delete(id);
        }

        public void Update(User user)
        {
            //ChannelFactory<UserContract> channelFactory = new ChannelFactory<UserContract>("userService");
            UserContract proxy = channelFactory.CreateChannel();
            proxy.Update(user);
        }

        public User GetUserById(int id)
        {
            //ChannelFactory<UserContract> channelFactory = new ChannelFactory<UserContract>("userService");
            UserContract proxy = channelFactory.CreateChannel();
            return proxy.GetUserById(id);
        }
    }
}

客户端运行程序

 public void InitLoad()
        {
            try
            {
                UserServiceClient userService = new UserServiceClient();
                User user = userService.GetUserById(30);
                MessageBox.Show(user.UserName);
            }catch(FaultException<FaultMessage> ex)
            {
                MessageBox.Show(ex.Detail.ErrorCode + ":" + ex.Detail.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnOk_Click(object sender, System.EventArgs e)
        {
            InitLoad();
        }

 

posted on 2014-09-07 11:17  lingfeng95  阅读(2996)  评论(7编辑  收藏  举报