《云计算与物联网》实验报告学院专业班级姓名学号2014年12月说明一、实验报告是本课程重要的实践教学环节,是提高学生应用计算机能力的重要措施。所有参加实验的学生都必须撰写实验报告。二、实验报告的质量反映了实验的学习质量,它是评定实验成绩的主要依据之一。不交报告者不得参加实验成绩评定。三、实验报告要求条理清晰,内容详尽,数据准确。四、实验课程结束后请将本报告上交学院存档保存。五、实验报告一次性提交,必须回答实验课上要求完成的思考题。3实验课程报告实验一建立和启动Azure程序开发环境1.AzureSDK有32位和64位两种版本,在64位的Windows7上安装AzureSDK时可以选择32位的版本吗?答:32位版本的SDK不能安装在64位操作系统上;不支持在MicrosoftWindows64位上的Windows32位(WOW64)下运行SDK。2.在你的电脑上执行DSInit命令后,本地StorageEmulator初始化成功的界面和图5有哪些地方一致,哪些地方不一致?答:下图分别为本地StorageEmulator初始化成功的界面和图5,图5实验截图4比较得,本地StorageEmulator初始化成功的界面和图5的不一致部分是用户账户通常不一样,创建的数据库名也不同。其他地方一致。1.图7所示的存储仿真器中的Blob、Queue、Table的含义是什么?其功能有何不同?是三种存储方式,Blob:Binarylargeobjects,可以理解为一堆bytes,可以用来存储影像,视频等等。在使用Blob时,需要先通过storageaccount创建一个或多个“container”,其中每个container都可以包含一个或者多个blob。Table如此设计的原因是为了满足大容量可扩展性的需要,用户只需要create新的Table存储entities即可,而无需像传统意义的Table那样在大容量数据环境下依赖于机器性能的要求以及数据库的优化工作等等。Queue不同于Table和Blob,Table和Blob主要用于数据的存储访问,而Queue主要用于WindowsAzure不同部分的通信,例如WebRole与WorkerRole之间的消息传递。实验二创建AzureWeb角色应用程序1.如果不选择index.htm并“设为起始页”,实验第二部分调试运行出现的界面是哪个,图12还是图23?答:运行程序后修改起始页可能报错,若开始运行前忘记设置起始页则出现的界面是图12。2.图25出现的模拟器显示界面为什么是三个命令窗口?本实验中还有哪个图有这样的结果?答:图15也有这样的结果,三个命令窗口对应“haoMvcWebRole1”文件夹中的三个运行实例。3.实验第二部分第2步添加目录“images”中,把“旅游电子商务网站”的“images”文件夹中的各个图片全部添加到相应的目录中去的快速方法你能找到吗?答:在类似图18的选择文件(添加“现有项”)界面中,一次全选所有的12个图片,可以一次性5添加到相应的目录中去,而无需一个一个的选择并添加。更快的方法是可以拷贝整个素材目录(实验源程序\lab2素材)中的文件到解决方案资源管理器“haoMvcWebRole1”文件夹下。4.WindowsAzure角色主要有哪两类?他们的含义和区别是什么?答:WindowsAzure角色是指在云中运行的可单独缩放的组件,云中的每个角色实例都分别对应于一个虚拟机(VM)实例。有两种类型的角色:Web角色和辅助角色(WorkerRole)Web角色是运行于IIS上的Web应用程序。该角色可通过HTTP或HTTPS终结点访问。Worker角色是一个可运行任意.NET代码的后台处理应用程序。它也能够公开面向Internet的终结点和内部终结点。我们可以认为Web角色和Worker角色是两种不同的虚拟机模板。其中Web角色是为了方便运行Web应用程序而设计的,而Worker角色是为了其他应用类型,如批处理。一种比较常见的架构设计方式是使用Web角色来处理展示逻辑,而通过Worker角色来进行业务逻辑处理。实验三编写WCF云后台工作角色应用程序1.把原始的自动生成的HelloWindowsAzure.cs类文件的代码保存到一个文本文件中,比较与实验指导书中提供的新代码的差别,回答如下的思考题:(1)如下代码的含义是什么?usingSystem.ServiceModel.Activation;usingSystem.ServiceModel.Description;usingSystem.ServiceModel.Channels;usingSystem.ServiceModel.Web;答:该代码的含义是引用WCF类库,可以使用它们包含的方法。(2)如下代码中的GetMessage函数对应图20的哪个部分?HelloWindowsAzure对应图20的那个部分?publicstringGetMessage(){returnHelloWindowsAzure;}答:该代码中的GetMessage函数对应图20浏览器窗口地址栏的输入“”。“HelloWindowsAzure”对应图20的浏览器窗口的正文部分。2.把原始的自动生成的app.config配置文件的代码保存到一个文本文件中,比较与实验指导书中提供的新代码的差别,回答如下的思考题:(1)如下代码中的behavior(行为)是WCF中的一个术语,试查找相关WCF书籍,说明其含义?行为分为哪几类?它们的含义分别是什么?本例中使用的是哪一类行为?serviceBehaviorsbehaviorserviceMetadatahttpGetEnabled=true//behavior/serviceBehaviors答:行为是那些影响运行时操作的WCF类。行为主要分为三类:服务行为(ServiceBehaviors)运6行于服务级别,能访问所有的端点。它们控制如实例化和事务之类的事项,还用于授权(Authorization)和审计(Auditing);端点行为(EndpointBehaviors)涉及服务端点。适用于对进出服务的消息进行审查和处理;操作行为(OperationBehaviors)涉及操作级别,对于服务操作而言,它们适用于序列化、事务流和参数处理。除了这三类行为,WCF还定义了回调行为(CallbackBehaviors),功能与服务行为相似,但它控制的是客户端创建的端点,用于双工通信。本例中使用的是服务行为(ServiceBehaviors)。(2)如下代码中的binding(绑定)是WCF中的一个术语,试查找相关WCF书籍,说明其含义?WCF提供了9种预先配置定义好的绑定,basicHttpBinding和wsHttpBinding是其中的2种,它们支持的功能有何不同?protocolMappingaddbinding=wsHttpBindingscheme=http//protocolMapping答:绑定定义的是与端点通信的信道(Channel)。信道是一个所有WCF应用程序传递消息的管道。信道包括一系列绑定元素(BindingElements)。最底层的绑定元素是传输(Transport),它负责在网络上传递消息。内置的传输包括HTTP、TCP、命名管道、PeerChannel和MSMQ。在此之上的绑定元素规定安全和事务(Transactions)。WCF中包含了9种系统提供的绑定,其信道已配置安排就绪,使用预先配置定义好的绑定能节省考虑配置的时间。basicHttpBinding能与2007年前的大多数Web服务轻松通信。它符合WS-IBP1.1标准,具有广泛的互操作性。wsHttpBinding实现了通用的WS-*协议,具有安全、可靠和事务化的消息能力。3.把原始的自动生成的WorkerRole.cs配置文件的代码保存到一个文本文件中,比较与实验指导书中提供的新代码的差别,回答如下的思考题:(1)如下代码的含义是什么?试结合图19说明之。Working字符串出现的频率是多少?while(true){Thread.Sleep(10000);Trace.WriteLine(Working,Information);}答:该代码的含义是循环在模拟仿真器界面显示“Working”字符串,如图19所示。“Working”字符串出现的频率是10s出现一次。(2)如下代码中与图20的哪个部分对应?把改为可以吗?在浏览器窗口输入,可以看到如图20所示的消息吗?this._serviceHost=newWebServiceHost(typeof(HelloWindowAzure),newUri());_serviceHost.Open();答:该代码中的“”与图20的浏览器窗口地址栏的输入部分对应。可以把“”改为“”。在浏览器窗口输入“http://127.0.0.1::8080/GetMessage”,可以看到如图20所示的消息。7实验四编写Table存储服务应用程序1.在执行实验中的程序时,会发生SetConfigurationSettingPublisherneedstobecalledbeforeFromConfigurationSettingcanbeused的异常,因为在FullIIS的模式下,WebRole.cs中的程序并不会执行。若要解决此问题,则要将原本执行于WebRole.cs的OnStart方法中的SetConfigurationSettingPublisher程序移到Web应用程式的Global.asax.cs内的Application_Start事件程序中。请依照上述说明移动程序并解决调试问题。2.看一个很简单的LINQ查询例子,查询一个int数组中小于5的数字,并按照大小顺序排列:classProgram{staticvoidMain(string[]args){staticvoidMain(string[]args){int[]arr=newint[]{8,5,89,3,56,4,1,58};varm=fromninarrwheren5orderbynselectn;foreach(varninm){Console.WriteLine(n);8}Console.ReadLine();}使用VisualStudio2010中的C#语言创建一个简单的控制台项目,上机实现上述例子,并查看结果。答:输出的结果为1,3,4。实验五编写基于Blob的云存储应用程序1.把描述性信息用中文输入是否可以上传?答:不可以。2.程序调试运行时,出现“外部组件发生异常”错误是什么原因?改变ServiceConfiguration.cscfg文件中的运行实例的个数(比如2改为3)能否解决该问题?答:错误的原因有多种,一种可能是没有启动SQLExpress进程。若启动了SQLExpress并初始化了存储模拟器,则可以解决该问题;否则不能解决。改变“ServiceConfigurarion.csfg”文件中的运行实例的个数(如2改为3)其作用相当于迫使程序重新编译生成一遍。3.程序调试运行时,出现“存储模拟器未加载”错误是什么原因?如何解决?答:3、当程序调试运行时,出现“存储模拟器未加载”错误是没有预先执行DSInit初始化命令,需加载StorageEmulator。4.在本实验中是否可以上传多个图片?答:可以。可以继续上传新的图