微软的SDK已经出来很久了,有些小伙伴都曾经使用过,但是呢,还是有更多小伙伴没有能够弄清楚,今天我么就来看看在VS2013中怎么使用微软的SDK吧!
SDK让你可以在C++中使用REST服务
Visual Studio 2013中包括了C++ REST SDK version 1.0(也称为Casablanca)。这个微软的开源项目包括在CodePlex中,这个项目同时也利用了c++11中的新特点,设计了现代、异步、多平台API,从而简化了基于云端的编程。这是两篇关于C++ REST SDK系列文章的第一篇,我会介绍如何通过SDK来使用REST服务。在下一篇文章中,我将介绍怎样利用SDK来检索和发送JSON文件。
理解C++ REST SDK结构
当你需要最佳性能时,你往往会在本地进行评估,那么C++就是最佳选择之一。微软认为C++在云端也是很有价值的,微软最新的C++ REST SDK使得开发者可以通过C++来调用REST服务,从而满足高性能和可扩展的要求。它让你在C++中就可以调用REST服务或者是编写其他与云计算相关的代码。
如果你正在使用C++来调用云端服务,但是你在回调函数中使用基于C语言的同步API,那么你没用充分利用最新C++版本的高明之处。同时,你的代码可能会很难阅读和调试,同步的API使得你很难设计一个反应敏捷的用户界面(UI)。大部分现代的WEB API都尽量减少不必要的样板,并且提供异步方法。这些方法避免了C风格的回调函数的复杂性。
比如,你正在使用C++,但是你利用它,通过调用一个同步的基于C的API,来进行HTTP的GET调用,那么这样做的效率是不能和其他编程语言比如C#、Python相提并论的。微软基于并行模式库PPL研发了C++ REST SDK,并且利用了PPL的基于任务编程模型。无论何时,你利用C++ REST SDK执行异步操作,你都创建了一个新的PPL任务。为了让C++ REST SDK可以移植到Linux平台上,微软确保PPL的关键部分可以在Linux上运行(并且使用GCC编译)。因此,C++ REST SDK为依赖C++ 11的C++提供了一个并发运行环境。不同于使用回调函数,你可以优雅地编写C++11标准的代码来创建任务并且在其他任务执行完毕后,调度任务。如果你之前有过PPL的编程经验,你会发现使用C++ REST SDK非常简单。
C++ REST SDK基于如下的四个底层栈或是API,这些栈或是API是基于不同操作系统提供的服务。(见Figure1)
WinHTTP:也称为Microsoft Windows HTTP Services. 这是一个基于C语言的HTTP客户端API。
PPL( Parallel Patterns Library的简称): 构成异步操作的编程模型。C++ REST SDK 在不同的Windows版本中使用WinHTTP 。
Boost.Asio: 跨平台的C++库,可以用于网络编程或是底层的I/O编程。它提供了一致的异步模型。该库采用现代C++方法。 C++ REST SDK 使用Boost.Asio 在Linux平台上管理通信。
HTTP.sys: Windows 服务器端的HTTP。C++ REST SDK 在不同的Windows版本中使用 HTTP.sys。
目前(写成本文时),C++ REST SDK支持以下操作系统。特别注意,对Windows XP 系统和Windows Phone 8.x系统的支持,还在试验阶段。
Windows XP
Windows Vista
Windows 7
Windows 8.x
Windows Phone 8.x
Linux
C++ REST SDK还包括如下部分,这些功能使用了不同的底层栈(见Figure 2):
Asynchronous streams and stream buffers(异步流和流缓冲区):这部分提供了一种基本的异步流,一种基本的异步流缓冲区,以及许多实现,比如异步文件流。有一些特定的互操作流,可以支持STL iostreams和C++ REST SDK异步流之间的互相操作。
HTTP client and listener(HTTP客户端与监听):HTTP客户端允许你获得与HTTP服务的连接,并且向服务器发送请求。 HTTP监听让你可以从指定的URI接收信息。
JSON parser and writer(JSON解析和写入): JSON对于像C++之类的静态语言是一个挑战。 C++ REST SDK 中使用一个单独的类(web::json::value)来表示JSON值,并且提供了必要的操作来帮助数据序列化 。你可以在代码执行阶段,声明与JSON数值相关的类型。 C++ REST SDK 允许你通过JSON解析从流中读取JSON数据,以及向流中写入JSON数据。
TCP client and listener(TCP客户端与监听):TCP客户端为TCP网络服务提供了客户端连接。TCP监听会持续监听TCP客户端的网络连接。TCP客户端与监听的最大优势在于,可以完成非阻塞异步操作。但是,这些组件仍然在实验阶段。如果你要使用System.Net.Sockets::TcpListener或者System.Net.Sockets::TcpClient类,你要适应使用实验版的TCP客户端和监听,以及它们提供的简单的非阻塞异步操作。
微软的C++ REST SDK团队计划在不久的将来,在系统中增加如下部分:
Web Sockets client and listener. WEB Socket客户端与箭筒
UDP client and listener. UDP 客户端与监听
Additional product-specific APIs built on top of the C++ REST SDK, such as Azure Storage, Mobile Services, and Bing Maps. 基于C++ REST SDK的其他产品专用API,比如Azure存储,移动服务和Bing地图。
在Visual Studio 工程中使用C++ REST SDK
在Visual Studio中创建使用SDK的项目并且成功生成该项目,你需要从CodePlex(http://casablanca.codeplex.com/)下载并安装最新的SDK。在本文中,使用的是1.3版本。如果你下载的不是这一版本,你要在相应的配置值上做出调整。
版本1.3中默认的安装文件夹是C:Program Files (x86)Microsoft Cpp REST SDK for VS 2013 v1.3SDK.VSProject子文件夹下有两个属性文件与你的Visual Studio工程相对应:CppRest.propsandversion.props.
当你在Visual Studio中创建了你准备使用C++ REST SDK的工程之后,你必须按照下列步骤操作:
将C++ REST SDK安装文件夹下的两个属性文件,即VSProject子文件夹中的CppRest.props以及version.propswe文件,复制到你创建Visual Studio项目的主文件夹中。
打开cpprest.props属性文件,其中的两个属性问价可能有错误值:CppRestSDKPathandCppRestRuntimeBaseFileName.如下图所示,如果你找到了下面的两行,你要将其中110替换为120。在64-bit的Windows版本中,规定了C++ REST SDK基本安装文件夹的属性值是InstallDir,这个属性值在HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftCppRestSDKOpenSourceReleaseP�1.3SDK中.不幸的是,一些SDK版本不会检查属性值,如果你不用上述的120替换掉110这个值,就不能成功生成对应工程。因为,不替换对应值的话,在生成项目的过程中,找不到正确的注册表入口。C++ REST SDK中提供的样例,也存在这样的问题,因此你必须在属性文件中替换相应值,才能正确生成项目文件。
未修改属性文件:
<CppRestSDKPath>$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINESoftwareMicrosoftCppRestSDKOpenSourceReleaseH�$(CppRestSDKVersionString)SDK`, `InstallDir`))</CppRestSDKPath>
<CppRestRuntimeBaseFileName>$(CppRestBaseFileName)110$(DebugFileSuffix)_$(CppRestSDKVersionFileSuffix)</CppRestRuntimeBaseFileName>
修改后的属性文件:
<CppRestSDKPath>$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINESoftwareMicrosoftCppRestSDKOpenSourceReleaseP�$(CppRestSDKVersionString)SDK`, `InstallDir`))</CppRestSDKPath>
<CppRestRuntimeBaseFileName>$(CppRestBaseFileName)120$(DebugFileSuffix)_$(CppRestSDKVersionFileSuffix)</CppRestRuntimeBaseFileName>
现在,打开在你喜欢的文本编辑器中,打开你的C++项目对应Visual Studio 中的vcxproj文件,在Project中加入下面一行。这样,你的项目就可以包含CppRest.props中的定义。值得注意的是,CppRest.props中有一行是引入已经拷贝的CppRest.props配置文件:<Import Project=”CppRest.props” />
在Visual Studio中打开对应项目,打开项目属性。在Configuration Properties | VC++ Directories中的include Directories属性中加入C++ REST SDK安装路径下include子文件夹的完整路径。如果你使用的是默认安装文件夹,你需要添加的属性值为C:Program Files (x86)Microsoft Cpp REST SDK for VS 2013 v1.3SDKinclude。
在Configuration Properties | VC++ Directories中Library Directories属性中加入C++ REST SDK安装路径下lib子文件夹的完整路径.如果你使用的是默认安装文件夹,那么你需要添加的属性值为C:Program Files (x86)Microsoft Cpp REST SDK for VS 2013 v1.3SDKlib.
添加C++ REST SDK库。具体来说,在Configuration Properties | Linker | Input中的Additional Dependencies加入cpprest120d_1_3.lib文件。
现在,你的C++项目就可以开始和C++ REST SDK一起工作了。(你也可以在 Package Manager Console控制台,通过运行命令Install-Package cpprestsdk来安装最新版本的C++ REST SDK,同时,使用相应包来向已经建立的项目添加C++ REST SDK并完成相应设置。但是,在新项目中使用最新版本SDK的最佳方法,是按照上文所述的步骤进行配置和添加。)
最后,小编在说一句,有需要VS2013或者VS2017学习c/c++编程的小伙伴可以查看小编主页加群哦~小编这里有免费资源可以送给你的!
网友评论