如果想做一个分布式系统,肯定需要不同的机器来提供不同的服务,而有些基于http协议,有些tcp/ip协议,有些使用MSMQ通道,以往的技术实现起来比较容易,但是有一点是致命的:管理起来不方便。于是WCF顺势而出。但是使用一段时间后你会发现,你只是需要一点点,但是却有一堆臃肿的东西在你服务器上,于是wcfrest和WebApi顺势而出(其实是很原始的技术,只是换了一个马甲,重新封装了一下)。基础东西我就不介绍,主要说下实际应用的东西。
写博客一段时间,偶然百度下自己写的内容,发现各种爬虫把自己码的字都爬过去了。好吧,你赢了。此片博文特此感谢小蓝同学。好基友你们懂的。
Interface的定义:
定义一个很简单的方法,GetList。其实参数也可以使用这种方式:
那我为什么会选择上面的一种定义方式呢?我把BucketMessage这个Model的内容通知给客户端,每次请求都需要把这个Model全部参数传递上来。可能有人说这样会增加http请求的内容,但是我认为这样定义是为了所有接口的参数类型统一。至于你非要纠结那几个字段和网速性能方面,我只能说呵呵。
方法的实现如下:
接下来是选择Host的过程。刚开始我用IIS做宿主。于是,我果断开启苦比模式。
首先web.config的system.serviceModel节点:
参数说明:
AspNetCompatibilityEnabled:AppDomain(应用程序域)如果开启ASP.NET的兼容模式,则为true.
HelpEnabled:如果 WCF帮助页启用 则true
对于配置文件的管理,我个人倾向于把Config文件夹统一放到一个根目录,然后在服务器mklink.不明白的google。
然后在Global.asax中添加:
嗯,只是一个路由映射而已。
然后在配置文件中添加映射的配置:
如想对每个Request都执行Application_BeginRequest,那么必须要在system.web或system.webServer中的modules中加入
runAllManagedModulesForAllRequests="true"属性.
iis启动,访问http://localhost:8080/Bucket/Bucket/GetList,调用,一切OK。
但是用IIS当host的一个不好地方就是当我把方法改成了Post以后,再次调用,要么找不到这个url,要么405,具体原因不明。调试一晚上无果,求大神告知。
于是换成了Winform当Host,正式上线后用Windows Service当Host。
Chrome下输出:
Rest的好处在于轻巧和灵活,基于WebApi的规定。但是Rest只能用webHttpBinding绑定。
在lync2013的原生态界面上添加一个菜单,下面是添加后的效果。
当然,可以在菜单列表上添加菜单,也可以在联系人的右键菜单上添加菜单,主要是通过修改注册表的方式来添加的,
下面是注册表文件,将下列注册表文件导入PC后自定义菜单就会起效。
机器系统环境为64位win7,
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Lync\SessionManager\Apps\{0C7E138E-C6FD-48EA-9191-46FFA98EA902}] "Name"="云课堂" "Path"="F:\\工作文件\\17.Lync开发\\5.Demo\\Args\\Args\\bin\\Debug\\Args.exe userId=%user-id%" "ApplicationType"=dword:00000000 "ToolTip"="tooltip text" "Smallicon"="F:\\工作文件\\18.云课堂\\OutFile\\UI\\Icon32\\AnimationD.png" "ExtensibleMenu"="MainWindowActions"
如图:
如果是win8的话,应该是导入下列注册表文件。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Lync\SessionManager\Apps\{0C7E138E-C6FD-48EA-9191-46FFA98EA902}] "Name"="云课堂" "Path"="F:\\工作文件\\17.Lync开发\\5.Demo\\Args\\Args\\bin\\Debug\\Args.exe userId=%user-id%" "ApplicationType"=dword:00000000 "ToolTip"="tooltip text" "Smallicon"="F:\\工作文件\\18.云课堂\\OutFile\\UI\\Icon32\\AnimationD.png" "ExtensibleMenu"="MainWindowActions"
win7与win8实际上就是注册表位置不同而已。
下面介绍一下各个键值的含义
Name:指的是自定义菜单的名称。
Path: 指的是菜单打开的程序的路径;如果要打开的是一个网页的话,请把path值修改为网页的URL地址,例如:“http://www.baidu.com”
ApplicationType:指的是自定义菜单打开的程序类型,如果设置为0的话,指的是打开的是桌面程序;设置为1的话,指的是打开的是web程序;一般与Path对应设置:为0时,path的值为桌面程序的物理路径;为1时,path的值为web程序的Url地址。
Smallicon:为自定义菜单的图标文件路径。
ExtensibleMenu:为自定义菜单显示的位置,在上述注册文件这个值为“MainWindowActions”,指的是在主面板的菜单列表中显示。还有其他的值分别为MainWindowRightClick;ConversationWindowActions;ConversationWindowRightClick;ContactCardMenu,如果未定义 ExtensibleMenu,则使用 MainWindowRightClick 和 ConversationWindowActions 的默认值。
参考的资料:http://technet.microsoft.com/zh-cn/library/gg412788.aspx
注意,这个微软的官方资料并不十分准确(2013年6月5日),它设置的注册表位置为 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Lync\CustomCommands ,测试过后发现没有效果,实际上是应该设置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Lync\SessionManager\Apps这个位置(win7 64位)或 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Lync\SessionManager\Apps这个位置(win8)。
我的lync2013的版本是
是Office2013套件中的lync,打过了lync的一个补丁,地址http://support.microsoft.com/kb/2812461
经过测试,lync Basic 2013打过上述补丁的话,也是可以正常显示的。