WCF/WPF公司内部订餐程序开发 (服务端篇)

上班的第一天,群里讨论关于订餐的问题,所以想到了要不要自己开发一个公司内部的订餐系统呢?方便公司内部员工的订餐,有了想法就简单的实践了下 。

实现还是很简单的,因为只是自己内部使用,所以没有考虑太多的因素。数据库选用的Ndatabase,之所以用到数据库其实开始的想法是希望添加一个自动推荐食物的功能的.

1. 新建一个类库工程QSnack.Contract(服务契约工程),结构:

我们定义了三个服务接口:

1) IUserService : 用户服务接口,用户的注册/注销/积分/用户信息更新,  基于basicHttp协议.

    [ServiceContract(Namespace="http://www.swzsoft.cn",Name="UserService")]
public interface IUserService {
/// <summary>
/// 用户注册
/// </summary>
/// <param name="username">用户名</param>
/// <param name="password">用户密码</param>
/// <param name="phone">用户联系电话</param>
/// <returns></returns>
[OperationContract]
int Register(string username, string password, string phone);
/// <summary>
/// 用户注销
/// </summary>
/// <param name="username"></param>
[OperationContract]
void Unregister(string username);
/// <summary>
/// 用户信息更新
/// </summary>
/// <param name="username"></param>
/// <param name="phone"></param>
/// <param name="password"></param>
/// <returns></returns>
[OperationContract]
int UpdateUserInformation(string username, string phone, string password);
/// <summary>
/// 更新用户积分
/// </summary>
/// <param name="username"></param>
/// <param name="intergral"></param>
[OperationContract]
void UpdateIntegral(string username, int intergral);
}

2) IShopService: 商家服务接口, 商家注册/注销/食品/,基于basicHttp协议.

    [ServiceContract(Name="ShopService",Namespace="http://www.swzsoft.cn")]
public interface IShopService {
/// <summary>
/// 注册商家
/// </summary>
/// <param name="shopname">商店名称</param>
/// <param name="phone">商店外卖电话</param>
/// <param name="address">商店所在位置</param>
/// <returns>返回商店的guid</returns>
[OperationContract]
string Register(string shopname, string phone, string address);
/// <summary>
/// 注销商家
/// </summary>
/// <param name="guid"></param>
[OperationContract]
void Unregister(string guid);
/// <summary>
/// 获取所有商家信息
/// </summary>
/// <returns></returns>
[OperationContract]
System.Collections.Generic.List<ShopInfoModel> GetShops();
/// <summary>
/// 获取指定商家保护食物的类别
/// </summary>
/// <param name="guid"></param>
/// <returns></returns>
[OperationContract]
System.Collections.Generic.List<FoodModel> GetFoodsByShopGUID(string guid);
}

3) IOrderService:订单服务接口,订单预定/状态改变,基于双工协议.

    [ServiceContract(Name="OrderService",Namespace="http://www.swzsoft.cn",CallbackContract=typeof( IOrderServiceCallback))]
public interface IOrderService {
[OperationContract]
void Order(OrderModel orderModel);
[OperationContract] //targetType == 1 商家 , 0 - 用户
int UpdateOrderState(string id, OrderStateEnum state , int targetType );
} public interface IOrderServiceCallback {
void UpdateStateUser(OrderStateEnum state);
void UpdateStateShop(OrderStateEnum state);
}

2. 异常定义

定义一个异常基类

    [DataContract]
[KnownType(typeof( UserException))]
[KnownType(typeof( ShopException))]
[KnownType(typeof( OrderException))]
public class BasicException {
[DataMember]
public string Message { get; set; }
[DataMember]
public System.Reflection.MethodInfo Method { get; set; }
}

分别定义了:用户异常UserException,ShopException商家服务异常,OrderException 订单异常

3. 模型类

用户模型

[DataContract(Namespace="http://www.swzsoft.cn")]
public class UserModel {
[DataMember(IsRequired = true)]
public string Name { get; set; }
[DataMember(IsRequired = true)]
public string Password { get; set; }
[DataMember(IsRequired=true)]
public string Phone { get; set; }
[DataMember]
public int Intergral { get; set; }
}

    [DataContract(Namespace="http://www.swzsoft.cn")]
public class UserModel {
[DataMember(IsRequired = true)]
public string Name { get; set; }
[DataMember(IsRequired = true)]
public string Password { get; set; }
[DataMember(IsRequired=true)]
public string Phone { get; set; }
[DataMember]
public int Intergral { get; set; }
}

商家模型

[DataContract(Namespace="http://www.swzsoft.cn")]
public class ShopInfoModel {
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember(IsRequired = true)]
public string ShopGUID { get; set; }
}

    [DataContract(Namespace="http://www.swzsoft.cn")]
public class ShopInfoModel {
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
[DataMember]
public string Phone { get; set; }
[DataMember(IsRequired = true)]
public string ShopGUID { get; set; }
}

订单模型

[DataContract(Namespace="http://www.swzsoft.cn")]
public class OrderModel {
[DataMember]
public string ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public System.Collections.Generic.List<FoodModel> Food { get; set; }
[DataMember] //订餐客户名称
public string ClientName { get; set; }
[DataMember]
public OrderStateEnum OrderState { get; set; }
}

[DataContract]
public enum OrderStateEnum
{
[EnumMember]
Unconfirmed, //未确认
[EnumMember]
Confirmed, //确认
[EnumMember]
Without_Payment, //未付款
[EnumMember]
Payment, //已付款
[EnumMember]
Cancel, //取消
}

    [DataContract(Namespace="http://www.swzsoft.cn")]
public class OrderModel {
[DataMember]
public string ID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public System.Collections.Generic.List<FoodModel> Food { get; set; }
[DataMember] //订餐客户名称
public string ClientName { get; set; }
[DataMember]
public OrderStateEnum OrderState { get; set; }
} [DataContract]
public enum OrderStateEnum
{
[EnumMember]
Unconfirmed, //未确认
[EnumMember]
Confirmed, //确认
[EnumMember]
Without_Payment, //未付款
[EnumMember]
Payment, //已付款
[EnumMember]
Cancel, //取消
}

食物模型

[DataContract(Namespace="http://www.swzsoft.cn")]
public class FoodModel {
[DataMember(IsRequired = true)]
public string ShopGUID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public double Price { get; set; }
[DataMember]
public FoodTypeEnum FoodType { get; set; }
}

[DataContract(Namespace="http://www.swzsoft.cn")]
public enum FoodTypeEnum
{
/// <summary>
/// 套餐
/// </summary>
[EnumMember]
FOOD_SETMEAL ,

/// <summary>
/// 汤类
/// </summary>
[EnumMember]
FOOD_SOUP,

/// <summary>
/// 小菜
/// </summary>
[EnumMember]
FOOD_FOOD,
}

    [DataContract(Namespace="http://www.swzsoft.cn")]
public class FoodModel {
[DataMember(IsRequired = true)]
public string ShopGUID { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public double Price { get; set; }
[DataMember]
public FoodTypeEnum FoodType { get; set; }
} [DataContract(Namespace="http://www.swzsoft.cn")]
public enum FoodTypeEnum
{
/// <summary>
/// 套餐
/// </summary>
[EnumMember]
FOOD_SETMEAL , /// <summary>
/// 汤类
/// </summary>
[EnumMember]
FOOD_SOUP, /// <summary>
/// 小菜
/// </summary>
[EnumMember]
FOOD_FOOD,
}

4.数据库,数据库操作分为shopDB,OrderDB,UserDB分别对应不同的服务接口,使用NDatabase数据库

UserDB.cs

public class UserDB {
/// <summary>
/// 插入新的用户
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="phone"></param>
/// <returns></returns>
public static int InsertUser(string username, string password, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj == null) {
UserModel model = new UserModel {
Name = username,
Password = password,
Phone = phone,
Intergral = 0
};
db.Store<UserModel>(model);
return 1;
}

return 0;
}
}

/// <summary>
/// 删除用户
/// </summary>
/// <param name="username"></param>
public static void DeleteUser(string username) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
db.Delete<UserModel>(obj);
}
}
}

/// <summary>
/// 更新用户
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="phone"></param>
public static void UpdateUser(string username, string password, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
obj.Password = password;
obj.Phone = phone;

db.Store<UserModel>(obj);
}
}
}

/// <summary>
/// 更新用户积分
/// </summary>
/// <param name="integral"></param>
/// <param name="username"></param>
public static void UpdateIntegral(int integral, string username) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
obj.Intergral += integral;
db.Store<UserModel>(obj);
}
}
}
}

    public class UserDB {
/// <summary>
/// 插入新的用户
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="phone"></param>
/// <returns></returns>
public static int InsertUser(string username, string password, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj == null) {
UserModel model = new UserModel {
Name = username,
Password = password,
Phone = phone,
Intergral = 0
};
db.Store<UserModel>(model);
return 1;
} return 0;
}
} /// <summary>
/// 删除用户
/// </summary>
/// <param name="username"></param>
public static void DeleteUser(string username) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
db.Delete<UserModel>(obj);
}
}
} /// <summary>
/// 更新用户
/// </summary>
/// <param name="username"></param>
/// <param name="password"></param>
/// <param name="phone"></param>
public static void UpdateUser(string username, string password, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
obj.Password = password;
obj.Phone = phone; db.Store<UserModel>(obj);
}
}
} /// <summary>
/// 更新用户积分
/// </summary>
/// <param name="integral"></param>
/// <param name="username"></param>
public static void UpdateIntegral(int integral, string username) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<UserModel>().FirstOrDefault(o => o.Name.Equals(username));
if (obj != null) {
obj.Intergral += integral;
db.Store<UserModel>(obj);
}
}
}
}

OrderDB.cs

public class OrderDB {
public static void InsertOrder(OrderModel model) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<OrderModel>().FirstOrDefault(o => o.ID.Equals(model.ID));
if (obj == null) {
db.Store<OrderModel>(model);
}
}
}

public static int UpdateOrder(string id, OrderStateEnum state) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var objs = (from x in db.AsQueryable<OrderModel>()
where x.ID.Equals(id, StringComparison.CurrentCultureIgnoreCase)
select x).FirstOrDefault();
if (objs == null) {
return 0;
}

if (state == OrderStateEnum.Cancel) {
if (objs.OrderState == OrderStateEnum.Confirmed ||
objs.OrderState == OrderStateEnum.Payment ||
objs.OrderState == OrderStateEnum.Cancel) {
return 0;
}
}
else {
if (state == objs.OrderState) {
return 1;
}
else {
objs.OrderState = state;
}
return 1;
}

return 1;
}
}
}

    public class OrderDB {
public static void InsertOrder(OrderModel model) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<OrderModel>().FirstOrDefault(o => o.ID.Equals(model.ID));
if (obj == null) {
db.Store<OrderModel>(model);
}
}
} public static int UpdateOrder(string id, OrderStateEnum state) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var objs = (from x in db.AsQueryable<OrderModel>()
where x.ID.Equals(id, StringComparison.CurrentCultureIgnoreCase)
select x).FirstOrDefault();
if (objs == null) {
return 0;
} if (state == OrderStateEnum.Cancel) {
if (objs.OrderState == OrderStateEnum.Confirmed ||
objs.OrderState == OrderStateEnum.Payment ||
objs.OrderState == OrderStateEnum.Cancel) {
return 0;
}
}
else {
if (state == objs.OrderState) {
return 1;
}
else {
objs.OrderState = state;
}
return 1;
} return 1;
}
}
}

ShopDB.cs

public class ShopDB {
public static string InsertShop(string name, string address, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<ShopInfoModel>().FirstOrDefault(o => o.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
if (obj == null) {
ShopInfoModel shop = new ShopInfoModel {
Name = name,
Address = address,
Phone = phone,
ShopGUID = new Guid().ToString()
};

db.Store<ShopInfoModel>(shop);
return shop.ShopGUID;
}

return null;
}
}

public static void DeleteShop(string guid){
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<ShopInfoModel>().FirstOrDefault( o=> o.ShopGUID.Equals( guid,StringComparison.CurrentCultureIgnoreCase));
if(obj != null){
db.Delete<ShopInfoModel>(obj);
}
}
}

public static List<ShopInfoModel> QueryShops() {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obs = from o in db.AsQueryable<ShopInfoModel>()
select o;
return obs.ToList();
}
}

public static List<FoodModel> QueryFoods(string guid) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obs = from o in db.AsQueryable<FoodModel>()
where o.ShopGUID.Equals(guid, StringComparison.CurrentCultureIgnoreCase)
select o;
if (obs != null) {
return obs.ToList();
}

return null;
}
}
}

    public class ShopDB {
public static string InsertShop(string name, string address, string phone) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<ShopInfoModel>().FirstOrDefault(o => o.Name.Equals(name, StringComparison.CurrentCultureIgnoreCase));
if (obj == null) {
ShopInfoModel shop = new ShopInfoModel {
Name = name,
Address = address,
Phone = phone,
ShopGUID = new Guid().ToString()
}; db.Store<ShopInfoModel>(shop);
return shop.ShopGUID;
} return null;
}
} public static void DeleteShop(string guid){
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obj = db.AsQueryable<ShopInfoModel>().FirstOrDefault( o=> o.ShopGUID.Equals( guid,StringComparison.CurrentCultureIgnoreCase));
if(obj != null){
db.Delete<ShopInfoModel>(obj);
}
}
} public static List<ShopInfoModel> QueryShops() {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obs = from o in db.AsQueryable<ShopInfoModel>()
select o;
return obs.ToList();
}
} public static List<FoodModel> QueryFoods(string guid) {
using (var db = OdbFactory.Open(GlobeConfig.DATABASE)) {
var obs = from o in db.AsQueryable<FoodModel>()
where o.ShopGUID.Equals(guid, StringComparison.CurrentCultureIgnoreCase)
select o;
if (obs != null) {
return obs.ToList();
} return null;
}
}
}

5. 服务接口实现

UserService 用户服务

public class UserService : IUserService{
public int Register(string username, string password, string phone) {
return UserDB.InsertUser(username, password, phone);
}

public void Unregister(string username) {
UserDB.DeleteUser(username);
}

public int UpdateUserInformation(string username, string phone, string password) {
UserDB.UpdateUser(username, password, phone);
return 1;
}

public void UpdateIntegral(string username, int intergral) {
UserDB.UpdateIntegral(intergral, username);
}
}

    public class UserService : IUserService{
public int Register(string username, string password, string phone) {
return UserDB.InsertUser(username, password, phone);
} public void Unregister(string username) {
UserDB.DeleteUser(username);
} public int UpdateUserInformation(string username, string phone, string password) {
UserDB.UpdateUser(username, password, phone);
return 1;
} public void UpdateIntegral(string username, int intergral) {
UserDB.UpdateIntegral(intergral, username);
}
}

ShopService 商家服务

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple,
IgnoreExtensionDataObject = true)]
public class ShopService : IShopService{
public string Register(string shopname, string phone, string address) {
return ShopDB.InsertShop(shopname, address, phone);
}

public void Unregister(string guid) {
ShopDB.DeleteShop(guid);
}

public List<ShopInfoModel> GetShops() {
return ShopDB.QueryShops();
}

public List<FoodModel> GetFoodsByShopGUID(string guid) {
return ShopDB.QueryFoods(guid);
}
}

    [ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,ConcurrencyMode=ConcurrencyMode.Multiple,
IgnoreExtensionDataObject = true)]
public class ShopService : IShopService{
public string Register(string shopname, string phone, string address) {
return ShopDB.InsertShop(shopname, address, phone);
} public void Unregister(string guid) {
ShopDB.DeleteShop(guid);
} public List<ShopInfoModel> GetShops() {
return ShopDB.QueryShops();
} public List<FoodModel> GetFoodsByShopGUID(string guid) {
return ShopDB.QueryFoods(guid);
}
}

OrderService 订单服务

[ServiceBehavior( ConcurrencyMode=ConcurrencyMode.Multiple,IgnoreExtensionDataObject = true,InstanceContextMode= InstanceContextMode.PerSession)]
public class OrderService :IOrderService{
public static Dictionary<string, IOrderServiceCallback> _callbacks = new Dictionary<string, IOrderServiceCallback>();
public void Order(OrderModel orderModel) {
IOrderServiceCallback callback = OperationContext.Current.GetCallbackChannel<IOrderServiceCallback>();
if (!_callbacks.ContainsKey(orderModel.ID)) {
_callbacks.Add(orderModel.ID, callback);
}

OrderDB.InsertOrder(orderModel);
}

public int UpdateOrderState(string id, OrderStateEnum state,int targetType ) {
int result = OrderDB.UpdateOrder(id, state);
IOrderServiceCallback callback = _callbacks[id];
if (result == 1) {
if (callback != null) {
if (targetType == 1) {//shop
callback.UpdateStateUser(state);
}
else if (targetType == 0) { //user
callback.UpdateStateShop(state);
}
}
}

return result;
}

}

    [ServiceBehavior( ConcurrencyMode=ConcurrencyMode.Multiple,IgnoreExtensionDataObject = true,InstanceContextMode= InstanceContextMode.PerSession)]
public class OrderService :IOrderService{
public static Dictionary<string, IOrderServiceCallback> _callbacks = new Dictionary<string, IOrderServiceCallback>();
public void Order(OrderModel orderModel) {
IOrderServiceCallback callback = OperationContext.Current.GetCallbackChannel<IOrderServiceCallback>();
if (!_callbacks.ContainsKey(orderModel.ID)) {
_callbacks.Add(orderModel.ID, callback);
} OrderDB.InsertOrder(orderModel);
} public int UpdateOrderState(string id, OrderStateEnum state,int targetType ) {
int result = OrderDB.UpdateOrder(id, state);
IOrderServiceCallback callback = _callbacks[id];
if (result == 1) {
if (callback != null) {
if (targetType == 1) {//shop
callback.UpdateStateUser(state);
}
else if (targetType == 0) { //user
callback.UpdateStateShop(state);
}
}
} return result;
} }

 
 
分类: WCF实战项目
标签: wpfWCFC#订餐系统

WCF/WPF公司内部订餐程序开发的更多相关文章

  1. 搭建公司内部的NuGet Server

    随着公司业务慢慢的拓展,项目便会越来越来多,很多项目会依赖其他项目DLL,比如一些底层的技术框架DLL引用,还有各业务系统的也有可能会有引用的可能. 项目多,交叉引用多,如果要是有一个DLL更新,那就 ...

  2. 使用mvvm框架avalon开发公司内部运营管理系统的一些心得

    接触avalon差不多有一年时间了,当时是看前端大牛司徒正美的博客才了解到还有这么一个高大上的玩意,然后就加入了avalon的讨论群.从群里零零散散的了解了avalon的一些特性,感觉很强大,感觉思想 ...

  3. 4: 模块化应用程序开发 Modular Application Development Using Prism Library 5.0 for WPF (英汉对照版)

    A modular application is an application that is divided into a set of loosely coupled functional uni ...

  4. WPF触控程序开发(四)——MultiTouchVista_-_second_release_-_refresh_2的救赎

    起源 Multitouch是一款可用于Win7模拟触摸屏幕的开源软件(关于它的使用介绍),最后一次更新是在11年5月份,我是13年初开始用的,当时开发了一款类似IPhone相册的图片展示触控程序,就是 ...

  5. WPF触控程序开发(二)——整理的一些问题

    上一篇(WPF触控程序开发)介绍了几个比较不错的资源,比较基础.等到自己真正使用它们时,问题就来了,现把我遇到的几个问题罗列下,大家如有遇到其他问题或者有什么好的方法还望赐教. 问题1.如何获取触控点 ...

  6. 【翻译习作】 Windows Workflow Foundation程序开发-第一章03

    1.2.2.Visual Studio 2005扩展包 微软也为Windows Workflow开发者提供了Visual Studio 2005扩展包.扩展包将许多功能集成到Visual Studio ...

  7. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  8. ASP.NET4.5Web API及非同步程序开发系列(1)

    认识非同步程序开发设计模型 从VS2012开始引入的新的非同步程序设计的支持-------async/await设计模型 之前的当我们支持非同步作业的时候,往往使用多线程开解决,我们比较熟悉的就是 执 ...

  9. 初识linux端c++程序开发

    关于linux端程序开发,我以前一直不知道是做些什么,只是感觉听高端的.最近接触了一些,有了一些初步的认识. 首先,linux是一个操作系统,跟windows一样:接通电源.按下电脑开机,电脑就会自动 ...

随机推荐

  1. OCP-1Z0-051-标题决心-文章5称号

    5. Which SQL statements would display the value 1890.55 as $1,890.55? (Choose three .) A. SELECT TO_ ...

  2. hdu 逆袭指数

    Problem Description   这依然是关于高富帅小明曾经的故事—— 尽管身处逆境,但小明一直没有放弃努力,除了搬砖,小明还研究过东方的八卦以及西方的星座,一直试图在命理上找到自己能够逆袭 ...

  3. Apache conf文件配置个人总结

      其实说到conf文件的配置,网上那必定是大堆大堆的,故今儿写着篇小博文,也只是做个总结,至于分享的价值吗,如果对屏幕前的你有用,我也很乐意啦.   首先,我们要找到Apache安装目录,我的是Ap ...

  4. 阅读INI档 - Delphi一片

    程序往往需要读一些用户设置值.如何完成这一过程? B/S程序一般使用XML档.和C/S程序使用INI档. 前篇<C#迁移之callXBFLibrary - 2(调用非托管DLL)>是C#读 ...

  5. Hard Parse&amp;Soft Parse

    DDL每次运行将必须是难以解决. SQL 解析过程 Oracle对此SQL将进行几个步骤的处理过程: 1.语法检查(syntax check): 检查此sql的拼写是否语法. 2.语义检查(seman ...

  6. crawler_基础之_httpclient 访问网络资源

    先粘贴一个 简单版的,后期再修改 pom文件 <dependency> <groupId>org.apache.httpcomponents</groupId> & ...

  7. 深入浅出MS06-040

    入浅出MS06-040 时至今日,网上已有颇多MS06-040的文章,当中不乏精辟之作.与其相比,本文突显业余,技术上无法超越,徒逞口舌之快.本文适合有一定计算机基础,初步了解溢出攻击原理,略微了解逆 ...

  8. oracle创建user具体指示

    一个.用户的概念 用户,这是user,通俗的讲就是参观oracle数据库"人".在oracle在.的各种安全参数的用户可控制,为了保持数据库的安全性,的概念包括模型(schema) ...

  9. 汉字转整数,比系统简单易用!a2iLxx (覆盖物 16十六进制,VC6亲测可用)请提供意见~

    #include "string.h" #define INVALID_VALUE_LXX ((1 << (8 * sizeof(int) -1)) - 1) /*有符 ...

  10. hdu 5073 Galaxy(2014acm鞍山亚洲分部 D)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5073 Galaxy Time Limit: 2000/1000 MS (Java/Others)   ...