[SDK2.2]Windows Azure Storage (15) 使用WCF服务,将本地图片上传至Azure Storage (上) 服务器端代码

简介:

Windows Azure Platform 系列文章目录

 

  这几天工作上的内容,把项目文件和源代码拿出来给大家分享下。

  源代码下载:Part1    Part2    Part3

 

  我们在写WEB服务的时候,经常需要把本地的文件上传至服务器端进行保存,类似于上传附件的功能。

  在本章中,我们将新建WCF服务并上传至Azure云端,实现把本地的图片通过WCF保存至Azure Storage。

  本章需要掌握的技术点:

  1.WCF服务

  2.Azure Storage

  本章将首先介绍服务器端程序代码。

 

  1.首先我们用管理员身份,运行VS2013。

  2.新建Windows Azure Cloud Project,并命名为LeiAzureService

  

  3.添加"WCF Service Web Role",并重命名为LeiWCFService。

  

  4.打开IE浏览器,登录http://manage.windowsazure.com,在Storage栏,新建storage name为leiwcfstorage

  

 

 

  5.我们回到VS2013,选择Project LeiAzureService,展开Roles->LeiWCFService,右键属性

  

   6.在弹出的窗口里,Configuration栏,将Instance count设置成2, VM Size选择Small

  

  这样,就同时有2台 small size(1core/1.75GB)的Cloud Service自动做负载均衡了。

 

  7.在Settings栏,选择Add Setting,设置Name为StorageConnectionString,Type选择Connection String,然后点击Value栏的按钮

  在Create Storage Connection String中,选择Account Name为我们在步骤4中创建的leiwcfstorage

  

 

  8.再次点击Add Setting,设置Name为ContainerName,Type选择String,Value设置为photos。切记Value的值必须是小写

  

 

  9.在Project LeiWCFService中,修改IService1.cs

复制代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace LeiWCFService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "/UploadPic", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        string UploadPic(Stream ImageStream);
       
    }
}
复制代码

  

  10.修改Service1.svc

  这个类的主要功能是读取Azure配置文件cscfg的节点信息,并根据storage connection string,创建Container,并将本地的图片文件名重命名为GUID,并保存至Container

  项目中需要添加相关的引用,笔者就不详述了。

复制代码
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Text;


namespace LeiWCFService
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    // NOTE: In order to launch WCF Test Client for testing this service, please select Service1.svc or Service1.svc.cs at the Solution Explorer and start debugging.
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 : IService1
    {
        public string UploadPic(Stream ImageStream)
        {
            try
            {
                //获取ServiceConfiguration.cscfg配置文件的信息
                var account = CloudStorageAccount.Parse(
                    CloudConfigurationManager.GetSetting("StorageConnectionString"));

                var client = account.CreateCloudBlobClient();

                //获得BlobContainer对象
                CloudBlobContainer blobContainer
                    = client.GetContainerReference(CloudConfigurationManager.GetSetting("ContainerName"));

                if (!blobContainer.Exists())
                {
                    // 检查container是否被创建,如果没有,创建container

                    blobContainer.CreateIfNotExists();
                    var permissions = blobContainer.GetPermissions();

                    //对Storage的访问权限是可以浏览Container
                    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
                    blobContainer.SetPermissions(permissions);
                }


                Guid guid = Guid.NewGuid();
                CloudBlockBlob blob = blobContainer.GetBlockBlobReference(guid.ToString() + ".jpg");
                blob.Properties.ContentType = "image/jpeg";
                //request.Content.Headers.ContentType.MediaType

                //blob.UploadFromByteArray(content, 0, content.Length);
                blob.UploadFromStream(ImageStream);
                blob.SetProperties();

                return guid.ToString();
            }
            catch (Exception ex)
            {
                return ex.InnerException.ToString();
            }
        }
    }
}
复制代码

   以上代码和配置,实现了以下功能点:

  1.在Windows Azure Storage里创建名为photos的Container,并且设置Storage的访问权限

  2.设置上传的BlockbName为GUID

  3.通过UploadFromStream,将客户端POST的Stream保存到Azure Storage里

 

  11.修改Web.config的 <system.serviceModel>节点。设置WCF的相关配置。

复制代码
  <system.serviceModel>
    <bindings>
      <!--<webHttpBinding></webHttpBinding>-->
      <webHttpBinding>
        <binding name="WCFServiceBinding"
                 maxReceivedMessageSize="10485760"
                 maxBufferSize="10485760"
                 closeTimeout="00:01:00" openTimeout="00:01:00"
                 receiveTimeout="00:10:00" sendTimeout="00:01:00">
          <security mode="None"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="LeiWCFService.Service1" behaviorConfiguration="ServiceBehaviour">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="web" contract="LeiWCFService.IService1"></endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp helpEnabled="true" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
复制代码

  

  

  12.在VS2013离,点击Save All,并将项目发布至Windows Azure。

  DNS我们设置为LeiAzureService

  13.等待项目发布结束后,在IE浏览器中输入http://leiazureservice.cloudapp.net/service1.svc/help看到如下的图片,就证明发布成功了

  

    

 

分类:  Azure Storage

本文转自Lei Zhang的博客博客园博客,原文链接:http://www.cnblogs.com/threestone/p/3398818.html,如需转载请自行联系原作者
目录
相关文章
|
19小时前
|
存储 监控 安全
如何利用服务器为个人和企业提供定制服务?
【5月更文挑战第4天】如何利用服务器为个人和企业提供定制服务?
16 11
|
2天前
|
Java
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
如何解决使用若依前后端分离打包部署到服务器上后主包无法找到从包中的文件的问题?如何在 Java 代码中访问 jar 包中的资源文件?
11 0
|
3天前
|
Apache 项目管理 数据安全/隐私保护
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
Windows安装TortoiseSVN客户端结合Cpolar实现公网提交文件到本地服务器
|
5天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
6天前
|
弹性计算 运维 Serverless
Serverless 应用引擎产品使用之在阿里函数计算中,使用阿里云API或SDK从函数计算调用ECS实例的服务如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
30 4
|
11天前
|
Linux 网络安全 开发工具
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
【超详细!超多图!】【代码管理】Python微信公众号开发(3)- 服务器代码上传Github
17 0
|
14天前
|
安全 Unix Linux
Windows如何远程连接服务器?服务器远程连接图文教程
服务器操作系统可以实现对计算机硬件与软件的直接控制和管理协调,任何计算机的运行离不开操作系统,服务器也一样,服务器操作系统主要分为四大流派:Windows Server、Netware、Unix和Linux。今天驰网飞飞将和你分享Windows server远程连接图文教程,希望可以帮助到你
26 4
Windows如何远程连接服务器?服务器远程连接图文教程
|
15天前
|
网络协议 Ubuntu Linux
iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】
iPad Pro “买后生产力” - 在iPad上远程连接服务器编程写代码【公网远程】
|
18天前
|
安全 Java 网络安全
对象存储oss使用问题之使用oss上服务器后显示服务异常如何解决
《对象存储OSS操作报错合集》精选了用户在使用阿里云对象存储服务(OSS)过程中出现的各种常见及疑难报错情况,包括但不限于权限问题、上传下载异常、Bucket配置错误、网络连接问题、跨域资源共享(CORS)设定错误、数据一致性问题以及API调用失败等场景。为用户降低故障排查时间,确保OSS服务的稳定运行与高效利用。
19 0
|
22天前
|
网络协议 Java 物联网
阿里云服务器上搭建 MQTT服务
阿里云服务器上搭建 MQTT服务

热门文章

最新文章