登录
首页 » C# » 基于EF+WCF的通用三层架构 含解析 附源码

基于EF+WCF的通用三层架构 含解析 附源码

于 2013-03-13 发布
0 176
下载积分: 1 下载次数: 0

代码说明:

本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务调用及一个分页的实例。

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • first
    实现固定时隙分配的TDMA算法,有完整的节点和进程模型,用opnet实现(The TDMA algorithm for fixed slot allocation has a complete node and process model, which is implemented by opnet.)
    2021-02-08 15:09:54下载
    积分:1
  • moptratt-button
    分客户端和服务端,服务器可挂载多客户端,并支持用户的名称()
    2018-05-22 09:35:58下载
    积分:1
  • spwm
    说明:  可以通过STM32产生SPWM ,改变mos管的通断,做小功率的逆变发生程序(SPWM can be generated for low power inversion)
    2019-03-28 10:49:36下载
    积分:1
  • mfcping
    说明:  这是非常好的关于网络编程的例子,实现了ping程序,对于学习网络编程的人员来说是非常难得的材料。(It is a very good example of programming on the network to achieve the ping process, for learning network programming staff is very rare material.)
    2008-10-07 13:19:18下载
    积分:1
  • 代理IP自动更新校验器完整项目源码
    代理IP用途非常广泛,但是因为其不够稳定所以需要不停的更新,C#源码世界第二季重磅出击,能够自动获取更新代理IP地址并自动校验有效性。                                  整个项目非常完整,从数据库设计到流程,多线程执行任务。数据库基于SQLite,实现了以下功能:                                 定时自动从代理IP网站提取代理到数据库中并判断该代理ip的位置。                                 多线程校验代理IP有效性,自动剔除无效代理。                                 提供了现成的随机去除一个有效代理IP的方法,并附送一个demo,自动提取一个有效IP并使用这个IP访问网站。                                  源码采用简单三层架构:                                 Model:模型层,主要放了一个tb_proxy模型,包含代理ip的IP、端口、有效性、地址、最后校验时间                                 Common:数据交互,主要存放了一个tb_proxy类,包含了对代理IP的增加、删除、修改和随机提取                                 Library:公用类库,包含一个HttpHelper类、RegHelper正则帮助类、IPHelper根据ip查询位置信息类和一个SQLiteHelper类。                                 主程序:一个主窗体和一个代理提取测试窗体。主窗体中主要完成代理的提取和多线程校验,测试窗体主要实现随机提取一个有效代理并访问一个ip查询网站,测试代理有效性和真实性。                                  源码特色:                                 项目非常简洁明了,代码都有详细的注释说明。                                 使用了qqwry.dat根据IP获取所在地址。                                 多线程校验使用了lock以防止冲突,默认开启了50个线程,如果觉得CPU扛不住可以适当减少。                                 更新数据库的方法也使用了lock,因为太多的并发会导致SQLite出错,这样这样做并不影响更新速度。                                 日志显示采用了公共的日志列队方法,直接在主项目的任何地方调用都可以。            
    2017-03-14下载
    积分:1
  • C和指针
    学习c语言必读的一本书,指针讲解的很透彻。(c program language pointer)
    2020-06-24 06:20:02下载
    积分:1
  • c++ 邮件群发 例子源码
       #include "stdafx.h" #include #include #include "Resource.h" #include "TabDlg1.h" #include "winsock2.h"#include "stdafx.h"#include #include #include "Resource.h"#include "MainDlg.h" #include "TabDlg1.h" #include "TabDlg2.h" #include "TabDlg3.h" #include "winsock2.h"#define WM_CLICKBIT (WM_USER 1) //最小化,消息定义NOTIFYICONDATA nid;RECT RectForm; //广告窗口坐标 HFONT hFontURLNotVisit;//字体HFONT hFontURLVisited;extern TCHAR tcRunPath[MAX_PATH]; //程序当前路径目录HINSTANCE hInst; static HWND Child1hWnd,Child2hWnd,Child3hWnd; //TAB Control 3个子窗口句柄int initDialog(HWND hwnd)//初始化TAB CTR控件{ //TCHAR szWebSite[100]="http://returnc.com/archives/300.html"; //ShellExecute(hwnd,TEXT("open"),szWebSite,TEXT(""),NULL,SW_SHOWMAXIMIZED); HWND hwndTab = GetDlgItem(hwnd, IDC_TAB1); InitCommonControls(); TCITEM ItemStruct;//定义TAB的参数的结构体 ItemStruct.mask = TCIF_TEXT;//标签 ItemStruct.iImage = 0;//图像 ItemStruct.lParam = 0; ItemStruct.pszText = "SMTP设置";//选项的字符 ItemStruct.cchTextMax = 10; SendMessage(hwndTab, TCM_INSERTITEM, 0, (LPARAM)&ItemStruct);//不用SendMessage用 //TabCtrl_InsertItem(hwndTab,0,&ItemStruct);是一样一样的。 ItemStruct.pszText = "邮件内容";//同上,就是重新定义一下选项的字符 SendMessage(hwndTab, TCM_INSERTITEM, 1, (LPARAM)&ItemStruct); ItemStruct.pszText = "收件箱"; SendMessage(hwndTab, TCM_INSERTITEM, 2, (LPARAM)&ItemStruct); //Child1hWnd = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hwndTab, (DLGPROC)NULL, 0); //网上出现的是上面这个版本,我一开始用这个,给折腾到死都没得到子窗口控件,得不到控件就没法设置了 //因为后面的(DLGPROC)被置空了。这里置空,TAB只能当摆设,所以改成你自己建好的TAB1.CPP中的PROC函数就好了 Child1hWnd = CreateDialogParam((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),MAKEINTRESOURCE(IDD_DIALOG1),hwndTab,(DLGPROC)TAB1_Proc,0);//创建子窗口 Child2hWnd = CreateDialogParam((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),MAKEINTRESOURCE(IDD_DIALOG2),hwndTab,(DLGPROC)TAB2_Proc,0); Child3hWnd = CreateDialogParam((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),MAKEINTRESOURCE(IDD_DIALOG3),hwndTab,(DLGPROC)TAB3_Proc,0); ShowWindow(Child1hWnd, SW_SHOWDEFAULT); //默认显示一下第一个窗口 return 0; } BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ HWND hwndTab = GetDlgItem(hWnd, IDC_TAB1);//TAB Control句柄 HWND hwnd_Link=GetDlgItem(hWnd,IDC_SYSLINK1);//Syslink Control 文字链接——版权句柄 switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); HANDLE_MSG(hWnd, WM_SYSCOMMAND, Main_OnSysCommand); //最小化到托盘 HANDLE_MSG(hWnd,WM_LBUTTONDOWN,Main_OnLButtonDown);//左键点击 HANDLE_MSG(hWnd,WM_MOUSEMOVE, Main_OnMouseMove); //鼠标移动范围 HANDLE_MSG(hWnd,WM_PAINT, Main_OnPaint); //点击后显示网站 //HANDLE_MSG(hwnd,WM_CTLCOLORSTATIC, Main_OnCtlColor); case WM_CLICKBIT://最小化后,点击图标 { if(wParam == IDI_ICON1) { switch(lParam) { case WM_LBUTTONDBLCLK://左键双击事件 { ShowWindow(hWnd, SW_SHOWNORMAL); //显示窗口 Shell_NotifyIcon(NIM_DELETE, &nid);//删除托盘图标 SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//设置窗口坐标 } break; case WM_RBUTTONUP://右键起来时弹出快捷菜单,待完善” { MessageBox(hWnd,TEXT("作者比较懒,右键功能还没添加,双击左键恢复主窗口"),TEXT("憨笑"),MB_OK); } break; default: // ShowWindow(hWnd, SW_HIDE); break; } return TRUE; } else { return FALSE; } } break; case WM_NOTIFY: { /* switch (((LPNMHDR)lParam)->code)//文字链接部分 //TAB CONTROL 控件选择操作&文字链接 **********这一段经百次测试,10分之一左右的概率出现内存读取错误,疑似(LPNMHDR)lParam)->code读取问题 { case NM_CLICK ://点击 //case NM_RETURN ://回车键都可以打开链接 { PNMLINK pNMLink = (PNMLINK)lParam; LITEM item = pNMLink->item; NMHDR hdr = pNMLink->hdr; if ((hdr.hwndFrom == hwnd_Link) && (item.iLink == 0)) { ShellExecute(hWnd,TEXT("open"),"http://www.bachengxie.com/?p=300",TEXT(""),NULL,SW_SHOWMAXIMIZED);//打开网站 return TRUE; } else { return FALSE; } } break; default: break; } */ if ( *(LPDWORD)((LPBYTE)lParam 8)==TCN_SELCHANGE ) //子窗口选择 { int i = TabCtrl_GetCurSel(hwndTab);//返回TAB CTR选择页编号,显示对应窗口数据 switch (i) { case 0: { ShowWindow(Child1hWnd,SW_SHOWDEFAULT); ShowWindow(Child2hWnd,SW_HIDE); ShowWindow(Child3hWnd,SW_HIDE); } break; case 1: { ShowWindow(Child2hWnd,SW_SHOWDEFAULT); ShowWindow(Child1hWnd,SW_HIDE); ShowWindow(Child3hWnd,SW_HIDE); } break; case 2: { ShowWindow(Child3hWnd,SW_SHOWDEFAULT); ShowWindow(Child1hWnd,SW_HIDE); ShowWindow(Child2hWnd,SW_HIDE); } break; default: break; } return TRUE; } else { return FALSE; } } break; default: break; } return FALSE; }BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ SkinH_AttachEx(("skins/china.she"), NULL); //载入皮肤 initDialog(hwnd); //初始化TAB控件 hFontURLNotVisit=CreateFont(15,6,0,0,0,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_DONTCARE,"黑体");//设置TAB控件字体大小 //SendDlgItemMessage(hwnd,IDC_TAB1,WM_SETFONT,(WPARAM)hFontURLNotVisit,0); //设置TAB字体 return TRUE;}void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ switch(id) { case IDC_TOTRAY: { ToTray(hwnd); //最小化到系统托盘 } break; case ID_HELP: { ShellExecute(NULL,"open","ReadMe.txt",NULL,NULL,SW_SHOWNORMAL); //打开ReadMe文本。 } break; default: break; }}void Main_OnClose(HWND hwnd){ SkinH_Detach(); //释放窗口皮肤 EndDialog(hwnd, 0);}void Main_OnPaint(HWND hwnd) //设置起始点及图片大小{ GetClientRect(hwnd,&RectForm); MoveWindow(GetDlgItem(hwnd,IDC_STATIC_AD),RectForm.left 20,RectForm.top 20,523,80,TRUE); //X,Y分别为30和20的顶点坐标,长为430,宽为90,自我理解} void Main_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags){ GetClientRect(hwnd,&RectForm); if(x>=RectForm.left 20 && x=RectForm.top 20 && y=RectForm.left 20 && x=RectForm.top 20 && y
    2014-12-15下载
    积分:1
  • mzc1
    网络报告,可以快速修改使用,方便快捷!谢谢,使用!(Network report, you can quickly modify to use, quick and easy!)
    2013-12-25 12:50:36下载
    积分:1
  • WebQQ 接口 以及测试项目 附完整源码
    webqq接口实例,含测试项目
    2013-04-08下载
    积分:1
  • CSharpremoting
    仿照飞信,网络编程。像飞信一样,自由添加客户端用户。(Modeled Fetion, network programming.)
    2014-06-16 14:25:11下载
    积分:1
  • 696518资源总数
  • 106259会员总数
  • 28今日下载