写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 = ;
SqlParameter[] parameters=new SqlParameter[];
parameters[] = new SqlParameter(Constants.USERNAME, user.UserName);
parameters[] = new SqlParameter(Constants.PASSWORD, user.Password);
parameters[] = new SqlParameter(Constants.TRUENAME, user.Truename);
parameters[] = new SqlParameter(Constants.SEX, user.Sex);
parameters[] = new SqlParameter(Constants.BIRTHDAY, user.Birthday);
parameters[] = new SqlParameter(Constants.PHONE, user.Phone);
parameters[] = 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[];
parameters[] = 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[];
parameters[] = new SqlParameter(Constants.ID, user.Id);
parameters[] = 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[];
parameters[] = 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 = ;
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 = ;
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();
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();
}

最新文章

  1. ng1和ng2的部分对比----angular2系列(四)
  2. 中科院开源协会镜像站 Android SDK镜像
  3. 20145311利用gdb调试汇编代码
  4. Codeforces Round #279 (Div. 2) C. Hacking Cypher 前缀+后缀
  5. Android开发之R文件丢失
  6. create---创建表
  7. Tomcat- java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
  8. Android Fragment动态添加 FragmentTransaction FragmentManager
  9. php cgi 与 cli 区别
  10. &lt;php&gt;添加数据注意事项
  11. Linq GroupJoin 使用
  12. linux创建SVN客户端,服务器
  13. Jsp指令有那些?
  14. PHP设计模式三:原型设计模式
  15. 小程序组件中有bindinput监听报异常
  16. Visual Studio VS2010统计代码行数
  17. jetty域证书更新
  18. (O)jquery:e.target和this的区别(如何使事件委托后,被选元素的子元素不被选中)
  19. jingchi.ai 2017.11.25-26 Onsite面试
  20. Oracle管理监控之段空间利用监控-oracle性能优化

热门文章

  1. Tomcat 7集群基于redis的session共享设置
  2. while 循环居然可以用else
  3. debian9 下编译安装tengine2.2.1
  4. Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)
  5. SqlServer数据库碎片整理——BCC SHOWCONTIG
  6. Python基础学习Day5 字典的增、删、改、查的用法 分别赋值
  7. HTML css 样式表
  8. NTKO OFFICE文档控件
  9. windows下搭建vue
  10. 11.8java课后动手动脑