2014年12月19日星期五

on windows oracle monitoring service has not started successfully

Q: the oracle is installed on the Windows system, the service is set to automatically start, but when system starts, oracle monitoring service has not started successfully
Answer: a disguised form of the solution, using plan task start, start the script as follows:
@ echo off
Ping - 10 127.0.0.1 n > nul
Sc start OracleOraDb11g_home1TNSListener > nul
The Exit
@ echo on

2014年11月1日星期六

每日英语

It is never too late to be what you might have been.​
勇敢做自己,永远不嫌迟。

2014年10月30日星期四

每日英语

Live as if you were to die tomorrow. Learn as if you were to live forever.​
珍惜生活,就象死神即将来临;热爱学习,就象生命能够永恒。

2014年10月23日星期四

每日英语

Be yourself, everyone else is already taken.​
做你自己吧,其他角色都已经有人了。

2014年10月22日星期三

Linux有问必答:如何在CentOS7上改变网络接口名

提问: 在CentOS7,我想将分配的网络接口名更改为别的名字。有什么合适的方法来来重命名CentOS或RHEL7的网络接口?
传统上,Linux的网络接口被枚举为eth[0123...],但这些名称并不一定符合实际的硬件插槽,PCI位置,USB接口数量等,这引入了一个不可预知的命名问题(例如,由于不确定的设备探测行为),这可能会导致不同的网络配置错误(例如,由无意的接口改名引起的禁止接口或者防火墙旁路)。基于MAC地址的udev规则在虚拟化的环境中并不有用,这里的MAC地址如端口数量一样无常。
CentOS/RHEL6引入了一致和可预测的网络设备命名网络接口的方法。这些特性可以唯一地确定网络接口的名称以使定位和区分设备更容易,并且在这样一种方式下,无论是否重启机器、过了多少时间、或者改变硬件,其名字都是持久不变的。然而,这种命名规则并不是默认在CentOS/RHEL6上开启。
从CentOS/RHEL7起,这种可预见的命名规则变成了默认。根据这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。
* 基于接口类型的两个字母前缀:
*   en -- 以太网
*   sl -- 串行线路IP (slip)
*   wl -- wlan
*   ww -- wwan
*
* 名字类型:
*   b<number>                             -- BCMA总线和新书
*   ccw<name>                             -- CCW总线组名
*   o<index>                              -- 车载设备的索引号
*   s<slot>[f<function>][d<dev_port>]     -- 热插拔插槽索引号
*   x<MAC>                                -- MAC 地址
*   [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
*                                         -- PCI 位置
*   [P<domain>]p<bus>s<slot>[f<function>][u<port>][..]1[i<interface>]
*                                         -- USB端口号链
新的命名方案的一个小的缺点是接口名称相比传统名称有点难以阅读。例如,你可能会发现像enp0s3名字。再者,你再也无法来控制接口名了。
如果由于某种原因,你喜欢旧的方式,并希望能够选择任意名称分配给CentOS/ RHEL7的设备,你需要重写默认的可预测的命名规则,定义基于MAC地址udev规则。
下面是如何在CentOS或RHEL7命名网络接口。
首先,让我们来禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0”到GRUBCMDLINELINUX变量来实现的。
然后运行这条命令来重新生成GRUB配置并更新内核参数。
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg 
接下来,编辑(或创建)一个udev的网络命名规则文件(/etc/udev/rules.d/70-persistent-net.rules),并添加下面一行。更换成你自己的MAC地址(08:00:27:a9:7a:e1)和接口(sushi)。
 $ sudo vi /etc/udev/rules.d/70-persistent-net.rules 

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:a9:7a:e1", ATTR{type}=="1", KERNEL=="eth*", NAME="sushi"
最后,重启电脑并验证新的接口名。
请注意,配置重命名后的接口仍然是你的责任。如果网络配置(例如,IPv4设置,防火墙规则)是基于旧名称(变更前)的,则需要更新的网络配置以反映更改的名称。

译者:geekpi 校对:wxy
本文由 LCTT 原创翻译,Linux中国 荣誉推出

命令行基础工具的更佳替代品

命令行听起来有时候会很吓人,特别是在刚刚接触的时候,你甚至可能做过有关命令行的噩梦。然而渐渐地,我们都会意识到命令行实际上并不是那么吓人,反而是非常有用。实际上,没有命令行正是每次我使用 Windows 时让我感到崩溃的地方。这种感觉上的变化是因为命令行工具实际上是很智能的。 你在任何一个 Linux 终端上所使用的基本工具功能都是很强大的, 但还远说不上是足够强大。 如果你想使你的命令行生涯更加愉悦, 这里有几个程序你可以下载下来替换原来的默认程序, 它还可以给你提供比原始程序更多的功能。

dfc

作为一个 LVM 使用者, 我非常喜欢随时查看我的硬盘存储器的使用情况. 我也从来没法真正理解为什么在 Windows 上我们非得打开资源管理器来查看电脑的基本信息。在 Linux 上, 我们可以使用如下命令:
  1. $ df -h
该命令可显示电脑上每一分卷的大小、 已使用空间、 可用空间、 已使用空间百分比和挂载点。 注意, 我们必须使用 "-h" 选项使得所有数据以可读形式显示(使用 GiB 而不是 KiB)。 但你可以使用 dfc 来完全替代 df, 它不需要任何额外的选项就可以得到 df 命令所显示的内容, 并且会为每个设备绘制彩色的使用情况图, 因此可读性会更强。
另外, 你可以使用 "-q" 选项将各分卷排序, 使用 "-u" 选项指定你希望使用的单位, 甚至可以使用 "-e" 选项来获得 csv 或者 html 格式的输出.

dog

Dog 比 cat 好, 至少这个程序自己是这么宣称的。 你应该相信它一次。 所有 cat 命令能做的事, dog 都做的更好。 除了仅仅能在控制台上显示一些文本流之外, dog 还可以对其进行过滤。 例如, 你可以使用如下语法来获得网页上的所有图片:
  1. $ dog --images [URL]
或者是所有链接:
  1. dog --links [URL]
另外, dog 命令还可以处理一些其他的小任务, 比如全部转换为大写或小写, 使用不同的编码, 显示行号和处理十六进制文件。 总之, dog 是 cat 的必备替代品。

advcp

一个 Linux 中最基本的命令就是复制命令: cp。 它几乎和 cd 命令地位相同。 然而, 它的输出非常少。 你可以使用 verbose 模式来实时查看正在被复制的文件, 但如果一个文件非常大的话, 你看着屏幕等待却完全不知道后台在干什么。 一个简单的解决方法是加上一个进度条: 这正是 advcp (advanced cp 的缩写) 所做的! advcp 是 GNU coreutils 的一个 补丁版本, 它提供了 acp 和 amv 命令, 即"高级"的 cp 和 mv 命令. 使用语法如下:
  1. $ acp -g [file] [copy]
它把文件复制到另一个位置, 并显示一个进度条。
我还建议在 .bashrc 或 .zshrc 中设置如下命令别名:
  1. alias cp="acp -g"
  2. alias mv="amv -g"
(译者注: 原文给出的链接已貌似失效, 我写了一个可用的安装脚本放在了我的 gist 上, 用的是 AUR 里的 patch。)

The Silver Searcher

the silver searcher 这个名字听起来很不寻常(银搜索...), 它是一款设计用来替代 grep 和 ack 的工具。 The silver searcher 在文件中搜索你想要的部分, 它比 ack 要快, 而且能够忽略一些文件而不像 grep 那样。(译者注: 原文的意思貌似是 grep 无法忽略一些文件, 但 grep 有类似选项) the silver searcher 还有一些其他的功能,比如彩色输出, 跟随软连接, 使用正则表达式, 甚至是忽略某些模式。
作者在开发者主页上提供了一些搜索速度的统计数字, 如果它们的确是真的的话, 那是非常可观的。 另外, 你可以把它整合到 Vim 中, 用一个简洁的命令来调用它。 如果要用两个词来概括它, 那就是: 智能、快速。

plowshare

所有命令行的粉丝都喜欢使用 wget 或其他对应的替代品来从互联网上下载东西。 但如果你使用许多文件分享网站, 像 mediafire 或者 rapidshare。 你一定很乐意了解一款专门为这些网站设计的对应的程序, 叫做 plowshare。 安装成功之后, 你可以使用如下命令来下载文件:
  1. $ plowdown [URL]
或者是上传文件:
  1. $ plowup [website name] [file]
前提是如果你有那个文件分享网招的账号的话。
最后, 你可以获取分享文件夹中的一系列文件的链接:
  1. $ plowlist [URL]
或者是文件名、 大小、 哈希值等等:
  1. $ plowprobe [URL]
对于那些熟悉这些服务的人来说, plowshare 还是缓慢而令人难以忍受的 jDownloader 的一个很好的替代品。

htop

如果你经常使用 top 命令, 很有可能你会喜欢 htop 命令。 top 和 htop 命令都能对正在运行的进程提供了实时查看功能, 但 htop 还拥有一系列 top 命令所没有的人性化功能。 比如, 在 htop 中, 你可以水平或垂直滚动进程列表来查看每个进程的完整命令名, 还可以使用鼠标点击和方向键来进行一些基本的进程操作(比如 kill、 (re)nice 等),而不用输入进程标识符。

mtr

系统管理员的一个基本的网络诊断工具traceroute可以用于显示从本地网络到目标网络的网络第三层协议的路由。mtr(即“My Traceroute”的缩写)继承了强大的traceroute功能,并集成了 ping 的功能。当发现了一个完整的路由时,mtr会显示所有的中继节点的 ping 延迟的统计数据,对网络延迟的定位非常有用。虽然也有其它的 traceroute的变体(如:tcptraceroute 或 traceroute-nanog),但是我相信 mtr 是traceroute 工具里面最实用的一个增强工具。
总的来说, 这些十分有效的基本命令行的替代工具就像那些有用的小珍珠一样, 它们并不是那么容易被发现, 但当一旦你找到一个, 你就会惊讶你是如何忍受这么长没有它的时间! 如果你还知道其他的与上面描述相符的工具, 请在评论中分享给我们。

作者:Adrien Brochard 译者:wangjiezhe 校对:wxy
本文由 LCTT 原创翻译,Linux中国 荣誉推出

Announcing the AWS China (Beijing) Region

AWS is excited to announce its upcoming limited preview of its China (Beijing) Region. In the limited preview, which will be deployed in early 2014, a select group of China-based and multinational companies with customers in China will be invited to begin using the new Beijing Region to build their businesses and run their applications in the cloud. Businesses or software developers can apply for access to the limited preview of AWS services in the AWS China Region today at http://www.amazonaws.cn.
Customers who wish to use the new Beijing Region are required to sign up for a separate set of account credentials unique to the China (Beijing) Region. Customers with existing AWS credentials will not be able to access resources in the new Region, and vice versa.
Under the Limited Preview phase, access to the new Region will be by invitation only. AWS will periodically review applicants for the limited preview and invite more and more customers to experience our services in China. The China (Beijing) Region aims to help customers reduce latency to end-users based in China while avoiding the up-front expenses, long-term commitments, and scaling challenges associated with maintaining and operating their own infrastructure. Beijing joins Sydney, Singapore and Tokyo as the fourth Region in Asia Pacific and as the tenth Region worldwide. We will gradually open up the Region for a wider range of customers over time.
AWS’s new Beijing Region will support Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Block Store (Amazon EBS), Amazon Simple Storage Service (Amazon S3), Amazon Relational Database Service (Amazon RDS), Amazon DynamoDB, Amazon ElastiCache, Amazon Elastic MapReduce (Amazon EMR), Amazon Virtual Private Cloud (Amazon VPC), Amazon CloudWatch, AWS CloudFormation, AWS Storage Gateway, Amazon Simple Queue Service (Amazon SQS), Amazon Simple Notification Service (Amazon SNS), Auto Scaling, Elastic Load Balancing, Amazon Glacier, Amazon Simple Workflow (SWF), AWS Identity and Access Management (IAM), AWS Management Console, and AWS Premium Support.
Please visit the new China website for more information at www.amazonaws.cn.

每日英语

You can only come to the morning through the shadows.
不经历夜的黑暗,怎能见晨的光明

2014年10月20日星期一

每日英语

It is better to be hated for what you are than to be loved for what you are not.
宁可人恶真我,不愿人喜假我。

2014年10月18日星期六

创建git私有仓库

以ubuntu服务器为例,如果要创建小范围的私有git服务器,是非常简单的,只需要如下几个简单步骤:
Step 1: 安装git
直接通过sudo apt-get install git即可完成。
Step 2: 创建git用户
git用户用来通过SSH连接git服务,输入命令:
$ sudo adduser git
Step 3: 创建证书登录
首先收集所有需要登录的用户公钥,然后导入到/home/git/.ssh/authorized_keys文件即可。
Step 4: 初始化git仓库
假设仓库位于/srv/sample.git,在/srv目录下输入命令:
$ sudo git init --bare sample.git
这样就创建了一个裸仓库,裸仓库没有working dir,因为服务器上的git仓库纯粹是为了共享,仓库目录一般以.git结尾。然后把owner改为git:
$ sudo chown -R git:git sample.git
Step 5: 防止登录shell
出于安全考虑,git用户不应该登录shell,可以编辑/etc/passwd,找到类似一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell。
Step 6: 克隆仓库
在客户端就可以通过ssh克隆仓库了:
$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
然后,就可以正常推送了:
$ touch README
$ git add README
$ git commit -m "add readme"
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@ubuntu:/srv/sample.git
 * [new branch]      master -> master

2014年10月16日星期四

Python: List Comprehensions

Python: List Comprehensions

Note: Lines beginning with ">>>" and "..." indicate input to Python (these are the default prompts of the interactive interpreter). Everything else is output from Python.
Python supports a concept called "list comprehensions". It can be used to construct lists in a very natural, easy way, like a mathematician is used to do.
The following are common ways to describe lists (or sets, or tuples, or vectors) in mathematics.
S = {x² : x in {0 ... 9}}
V = (1, 2, 4, 8, ..., 2¹²)
M = {x | x in S and x even}
You probably know things like the above from mathematics lessons at school. In Python, you can write these expression almost exactly like a mathematician would do, without having to remember any special cryptic syntax.
This is how you do the above in Python:
>>> S = [x**2 for x in range(10)]
>>> V = [2**i for i in range(13)]
>>> M = [x for x in S if x % 2 == 0]
>>> 
>>> print S; print V; print M
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096]
[0, 4, 16, 36, 64]
I'm sure you want to see a more complicated example. :-) The following is yet another way to compute prime numbers. The interesting thing is that we first build a list of non-prime numbers, using a single list comprehension, then use another list comprehension to get the "inverse" of the list, which are prime numbers.
>>> noprimes = [j for i in range(2, 8) for j in range(i*2, 50, i)]
>>> primes = [x for x in range(2, 50) if x not in noprimes]
>>> print primes
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
NB: You can nest list comprehensions inside of each other, so you could write the above example with a single statement (without the need for the temporary variable "noprimes"). However, such lines tend to get long and less readable, so this is not recommended.
Of course, list comprehensions don't only work for numbers. Lists can contain any type of elements, including strings, nested lists and functions. You can even mix different types within a list.
The following works on a list of strings and produces a list of lists. Each of the sublists contains two strings and an integer.
>>> words = 'The quick brown fox jumps over the lazy dog'.split()
>>> print words
['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
>>> 
>>> stuff = [[w.upper(), w.lower(), len(w)] for w in words]
>>> for i in stuff:
...     print i
... 
['THE', 'the', 3]
['QUICK', 'quick', 5]
['BROWN', 'brown', 5]
['FOX', 'fox', 3]
['JUMPS', 'jumps', 5]
['OVER', 'over', 4]
['THE', 'the', 3]
['LAZY', 'lazy', 4]
['DOG', 'dog', 3]
>>> 
>>> stuff = map(lambda w: [w.upper(), w.lower(), len(w)], words)
>>> for i in stuff:
...     print i
... 
['THE', 'the', 3]
['QUICK', 'quick', 5]
['BROWN', 'brown', 5]
['FOX', 'fox', 3]
['JUMPS', 'jumps', 5]
['OVER', 'over', 4]
['THE', 'the', 3]
['LAZY', 'lazy', 4]
['DOG', 'dog', 3]
The above example also demonstrates that you can do exactly the same thing with map() and a lambda function. However, there are cases when you cannot use map() and have to use a list comprehension instead, or vice versa. When you can use both, then it is often preferable to use a list comprehension, because this is more efficient and easier to read, most of the time.
You cannot use list comprehensions when the construction rule is too complicated to be expressed with "for" and "if" statements, or if the construction rule can change dynamically at runtime. In this case, you better use map() and / or filter() with an appropriate function. Of course, you can combine that with list comprehensions.

装机的一次感想

昨天在我的笔记本上装了1个Linux系统。
我先装了1个windows xp系统,然后下载了debian的mini iso,可以通过网络进行安装。
在将mini iso解压安装setup.exe后,重启机器,进入到debian的安装界面,后面在硬盘分区的时候,将整个硬盘全部用为linux,安装完毕后,发现windowxp系统不存在了。

我将想到了一个成语:鸠占鹊巢。

在将debian的启动iso装到内存后,就可以重新格式化硬盘,并通过网络下载其它附加的库等内容。跟生物界有很多相似,也许就是模仿的生物界吧。

每日英语

Anyone who lives within their means suffers from a lack of imagination.
吃穿不愁,神思不游。

2014年10月15日星期三

创建插入mysql数据库的python脚本

创建插入mysql数据库的python脚本
#!/usr/bin/env python
#coding=utf-8

#导入相关模块
import MySQLdb
import datetime
starttime = datetime.datetime.now()
#建立和mysql数据库的连接
conn = MySQLdb.connect(host='localhost',user='root',passwd='eagle')
#获取游标
curs = conn.cursor()
#执行SQL,创建一个数据库
#curs.execute("create database pythondb")
#选择连接哪个数据库
conn.select_db('pythondb')
#执行SQL,创建一个表
#curs.execute("create table test(id int,message varchar(50))")
#插入一条记录
#value = [1,"eagle"]
#curs.execute("insert into test values(%s,%s)",value)
#插入多条记录
values = []
for i in range(20000):
    values.append((i,'hello mysqldb' + str(i)))
curs.executemany("insert into test values(%s,%s)",values)
#提交修改                              
conn.commit()
#关闭游标连接,释放资源
curs.close()
#关闭连接
conn.close()
endtime=datetime.datetime.now()
print (endtime-starttime).seconds

每日英语

Friend is who can give you strength at last.
朋友是在最后可以给你力量的人。

2014年10月14日星期二

在用python脚本开windows azure虚机报错:ssl.SSLError: [Errno 336265218] _ssl.c:355: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib

代码:
#coding:utf-8
#!/usr/bin/python
#
from azure import *

from azure.servicemanagement import *

from azure.servicemanagement.servicemanagementservice import ServiceManagementService

subscription_id = '9ffdf972-9f2c-4d25-9e68-6e6eaffd2cd7'

certificate_path = '/home/eagle/azure_demo/azuredemo.pem'

sms = ServiceManagementService(subscription_id, certificate_path)

result = sms.list_locations()

for location in result:

    print(location.name)


在用python脚本开windows azure虚机报错:
ssl.SSLError: [Errno 336265218] _ssl.c:355: error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib


发生该问题的原因为:
我使用的linux系统,未创建订阅的管理证书,创建成功后,脚本不会再报错

Linux下制作windows azure订阅管理证书

要使用编程方式管理订阅,需要一个订阅ID,和一个管理证书。

下面是Linux的制作证书的方法。

建立一个管理证书

任何与 Windows Azure 的交互都需要两个东西:
  • 一个订阅ID,
  • 一个 X509v3 管理证书。
我们假设你使用 Linux 运行这个脚本, 如果没有安装OpenSSL,请从root提示使用如下命令:
yum install openssl
以下将创建一个 .pem 文件,之后可被翻译成一个 .cer 文件,并导出和上传到Windows Azure。
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout elasta.pem -out elasta.pem
用下面命令导出 .cer:
openssl x509 -inform pem -in elasta.pem -outform der -out elasta.cer
这样你就得到它了,一个可以上传到你的 Windows Azure 订阅的管理证书。当做完这个时,你应该已经能够以编程方式使用 Windows Azure 了。

每日英语

You only live once, but if you do it right, once is enough.​
年华没虚度,一生也足矣。

2014年10月11日星期六

中国 Windows Azure 应用程序开发人员说明

Microsoft Corporation
更新时间:2014年2月 



关于本文档

Microsoft 提供了一些工具来创建和部署Microsoft Windows Azure 全球服务(“全球服务”)的云应用程序。
中国 Windows Azure 是由中国公司世纪互联从位于中国人民共和国(不包括香港特别行政区、澳门特别行政区和中国台湾地区)的数据中心运营并提供的独立 Windows Azure 平台。因此,创建和部署Windows Azure 服务—由世纪互联运营(“中国服务”),而不是由全球服务运营的应用程序时,开发人员需要先了解这两项服务之间的主要区别,然后再设置自己的编程环境、编写应用程序并将其部署为在中国托管的服务。
本文档概要说明了这些区别并为中国 Windows Azure 门户及 MSDN 上的 Windows Azure 技术库提供补充信息。官方信息也会在许多其他地方发布,如 Windows Azure 海报TechNet wiki 以及 Microsoft 员工发表的各种博客文章。本内容专门针对将在中国部署托管于中国的数据中心的合作伙伴及开发人员。
有关中国服务功能可用性的最新更新,请访问中国Windows Azure 门户。有关 Windows Azure 上当前内容资产的列表,请参阅本文档的附录。

为开发人员提供指导

由于 Microsoft 提供的大部分英文技术内容当前均假定应用程序是针对全球服务而开发,而非中国服务,因此务必确保开发人员了解为托管于中国而开发的应用程序的主要区别。
首先,功能上的差异,意即全球服务中的某些功能在中国不提供。
其次,在中国提供的功能具有运营差异,意即如需使用公共英文内容(针对全球服务而撰写),则必须自定义任何示例代码和步骤。

中国服务当前提供的功能

中国服务当前包含以下的 Windows Azure 功能。
·计算 – 虚拟机(适用于 IaaS 服务)
           - 包含 Windows Server Essentials Experience 服务器角色的 Windows Server 2012 R2 Data Center 
           - Windows Server 2012 R2 Data Center 
           - SQL Server (包含SQL Server 2014, SQL Server 2012, SQL Server 2008 R2 各版本) 
·计算 – 云服务(适用于 PaaS 服务)
·计算 – 网站
·数据服务 – 存储(适用于 Blob、表和队列)
·数据服务 – SQL 数据库
·SQL 数据库 – SQL 导入/导出
·网络 – 虚拟网络(通过本地网络在云服务之间进行通信)
·服务总线
·Active Directory
·访问控制服务 – 拥有其自己的 UI 和命名空间
·缓存 – 仅支持专用缓存
·媒体服务
·计划程序
·CDN

中国服务当前未提供的功能

中国服务当前不包含以下的 Windows Azure 功能。
·计算 – 在中国服务中,辅助角色实例不能作为计算资源添加到由 Microsoft HPC Pack 2008 R2 或 Microsoft HPC Pack 2012 创建的本地高性能计算 (HPC) 群集中。HPC Pack 仅支持在全球服务中添加辅助角色实例。
·移动服务
· Access Control Service(访问控制服务)命名空间
·数据服务 – SQL Reporting
·数据服务 – SQL 数据同步
·数据服务 – HDInsight
· SQL 数据库管理门户
·流量管理器


中国服务上创建应用程序时的区别概述

Windows Azure 中的托管服务由一个设计为在托管服务中运行的应用程序和多个定义托管服务如何运行的 XML 配置文件组成。托管服务同时使用服务定义文件 (.csdef) 和配置文件 (.cscfg)。有关详细信息,请参阅创建 Windows Azure 托管服务概述
在中国服务上开发托管服务时的一项主要区别是端点地址具有不同的 URI。例如,Windows Azure 和 SQL 数据库的 URI 通常以windows.net结尾。中国服务的开发人员必须能够识别 URI 端点的不同之处,然后将其使用的工具以及开发的应用程序配置为使用这些不同端点的对应 URI。
以下是需要更改端点 URI 时的示例:
·配置 Visual Studio 时
·定义 SQL 数据库的连接字符串时
·定义 Windows Azure 存储的连接字符串时
·定义 Windows Azure 计算的端口通信时
·使用服务管理 API 时
·将 URL 从自定义域名重定向到您所托管的服务时
·发行 HTTPS 端点证书时
·使用 Windows Azure 诊断(诊断使用 Windows Azure 存储)时
·使用设计为在 Windows Azure 上运行的工具和服务(这些工具和服务具有其自己的配置文件或服务定义文件)时
·使用 CSUPLOAD 工具为 VM 角色上传映像

端点映射

将 Windows Azure 和 SQL 数据库公共端点映射到中国特定的端点时,请参照下表。

服务类型
全球服务 URI
中国服务 URI
Windows Azure - 常规
*.windows.net
*.chinacloudapi.cn
Windows Azure 计算
*.cloudapp.net
*.chinacloudapp.cn
Windows Azure 存储
*.blob.core.windows.net
*.queue.core.windows.net
*.table.core.windows.net
*.blob.core.chinacloudapi.cn
*.queue.core.chinacloudapi.cn
*.table.core.chinacloudapi.cn
Windows Azure 服务管理
https://management.core.windows.net
https://management.core.chinacloudapi.cn/
SQL 数据库
*.database.windows.net
*.database.chinacloudapi.cn
Windows Azure 管理门户
http://manage.windowsazure.com
http://manage.windowsazure.cn
SQL Azure 数据库管理API
https://management.database.windows.net
https://management.database..chinacloudapi.cn
服务总线
*.servicebus.windows.net
*.servicebus.chinacloudapi.cn
ACS
*.accesscontrol.windows.net
*.accesscontrol.chinacloudapi.cn
HDInsight
*.azurehdinsight.net
*.hdinsightservices.cn
SQL 数据库导入/导出服务映射端点
  1. 中国东部:https://sh1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc
  2. 中国北部:https://bj1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc

中国的数据中心

中国服务当前运营着两个数据中心。这两个数据中心在location字段中显示为“China North”和“China East”。


设置用于开发的计算机

准备发布应用程序时,请打开 Windows Azure 项目的快捷菜单,然后选择Publish。下图显示了 Publish Windows Azure Application向导

配置订阅

1.从“Publish Windows Azure Application”向导的“Choose your subscription”下,选择 <Manage…>,然后再选择“New”。
2.在“New subscription”窗口中
a.选择要用于身份验证的证书。可以选择现有证书或创建新证书。
b.使用设置部分下的管理门户 (http://manage.windowsazure.cn) 将此证书上传至您的帐户
c.复制门户中的订阅 ID
d.输入以下服务管理 URL https://management.core.chinacloudapi.cn
e.指定订阅的名称

配置设置

1.在 Cloud service 列表中,请执行以下两组步骤之一:
o选择一项现有服务。此时将显示此云服务的数据中心的位置。记下这一位置并确保您的存储帐户位置与该数据中心位置相同。
o选择 Create New 创建 Windows Azure 托管的云服务。在 Create Windows Azure Services 对话框中,指定服务的名称,然后指定“China North”作为数据中心。
2.在 Environment 列表中,选择 Production 或 Staging。如果要将应用程序部署到测试环境中,请选择过渡环境。稍后可将应用程序移动到生产环境中。
3.在 Build configuration 列表中,选择 Debug 或 Release
4.在 Service configuration 列表中,选择 Cloud
5.选中 Enable Remote Desktop for all roles 复选框启用远程桌面。此选项主要用于故障排除。选中此复选框时,将显示 Remote Desktop Configuration 对话框。选择 Settings 链接可更改配置。
选中 Enable Web Deploy for all web roles 复选框启用 Web 部署。必须启用远程桌面才能使用此功能。有关详细信息,请参阅使用 Windows Azure 工具发布云服务。有关 Web 部署的详细信息,请参阅使用 Windows Azure 工具发布云服务.
6.选择 Advanced Settings 选项卡。在 Deployment label 字段中,可以接受默认名称,也可以输入您选择名称。如需将日期附加到部署标签,请选中对应复选框。
7.在Storage account列表中,选择用于此部署的存储帐户。比较云服务数据中心和存储帐户的位置。理想状态下,这两个位置应该相同。
8.如果您只希望部署已更新的组件,请选中 Deployment update 复选框。此类型的部署速度比全面部署更快。选择 Settings 链接,以打开 Deployment update settings 对话框,如下图所示。
您可以选择两个更新部署选项(增量或同时)中的任意一个。增量部署一次更新一个已部署的实例,以使您的应用程序保持在线状态并可供用户使用。同时部署会一次性更新所有已部署的实例。同时更新的速度快于增量更新,但是如果选择此选项,您的应用程序在更新过程中可能会不可用。
当更新部署失败后,如果您希望自动执行完整部署,应选中复选框 if deployment can't be updated, do a full deployment。完整部署将重置云服务的虚拟 IP (VIP) 地址。有关详细信息,请参见如何:为云服务保留固定的虚拟 IP 地址

发布项目

1.您可以用所选的设置创建发布配置文件。例如,对于测试环境,您可能具有一个置文件,而对于生产则有另一个配置文件。要保存此配置文件,请选择Save图标。此向导将创建配置文件并将其保存在 Visual Studio 项目中。
发布配置文件会显示在 Visual Studio 的 Solution Explorer 中,配置文件设置将被写入扩展名为 .azurePubxml 的文件中。这些设置均保存为 XML 标记的属性。
2.选择 Publish 以发布应用程序。您可以在 Visual Studio 中 Output 窗格中监控流程状态。

修改中国服务的配置和服务定义文件

修改现有项目时,请在指向 Windows Azure、SQL 数据库 URI 的服务定义文件或配置文件中搜索您的项目,以获取端点 URI。
对于中国,应将指向 *.windows.net 的端点重定向至新的 URI。以下列出了几个示例。

存储端点

您必须使用自定义存储端点。默认设置指向 *.core.windows.net,其中 * 基于您的应用程序和存储位置而发生变更。
在 Windows Azure 应用程序的 Windows Azure 服务配置文件 (.cscfg) 中,设置自定义数据连接字符串以指向中国服务中的 blob、队列和表存储 URI。以下代码显示了自定义端点的示例,其中<AccountKey>是一个变量,该变量必须由特定的存储帐户密钥替换。字符串 mystorageaccount 是在订阅下创建的存储账户的一个示例。

<Setting name="DataConnectionString" value=
"BlobEndpoint=https://mystorageaccount.blob.core.chinacloudapi.cn/;QueueEndpoint=
https://mystorageaccount.queue.core.chinacloudapi.cn/;TableEndpoint=https://mystorageaccount.table.core.chinacloudapi.cn/;
AccountName=mystorageaccount;AccountKey=<AccountKey> " />

请注意,自定义存储端点不包括 DefaultEndpointsProtocol 设置。此设置通常显示在指向 Windows Azure 公共版本的存储端点的连接字符串中。
Visual Studio 还提供了一个用于在给定角色的 Settings 部分中创建自定义存储端点的选项。

要在 Visual Studio 中创建自定义端点,请执行以下操作:
1.打开包含一个或多个角色的 Windows Azure 解决方案。
2.右键单击 Solution Explorer 中的任意角色。此操作将弹出该角色的配置。
3.单击Settings
4.单击Add Setting
5.为设置键入一个名称
6.选择连接字符串类型
7.单击弹出Storage Account Connection String对话框。
8.选择Enter storage account credentials
9.输入正确的存储帐户名和密钥。
10.选择Use custom endpoints,然后为 blob、表和队列端点输入正确的 https 字符串。
11.单击OK

Visual Studio 将在您的服务配置文件中创建一个自定义存储端点。您可以通过角色中的代码使用此存储端点。
以下代码通过使用特定于中国服务的自定义 URI 以编程方式显示与存储帐户的连接
CloudStorageAccount Account = newCloudStorageAccount(
newStorageCredentialsAccountAndKey(ACCOUNTNAME, ACCOUNTKEY),
);
CloudBlobClient BlobClient = Account.CreateCloudBlobClient();

Windows Azure 计算中的端口绑定

端口绑定还使用以 *.cloudapp.net 结尾的 DNS 名称。您必须更改这些名称以指向 *.chinacloudapp.cn)。以下显示了包括端口说明的部分服务定义文件。
<Sites>
<Site name="MySite" physcalDirectory="..\WebSite1">
<Bindings>
<Binding name="My" endpointName="HttpIn" hostHeader="WebSite1.mysite.Chinacloudapp.cn" />
</Bindings>
</Site>
<Site name="Web">
<Bindings>
<Binding name="HttpIn" endpointName="HttpIn" />
</Bindings>
</Site>
</Sites>
有关详细信息,请参见如何配置Windows Azure 端口

与 SQL 数据库服务器的连接

SQL 数据库服务器名称将从 *.database.windows.net 更改为 *.devdatabase.chinacloudapi.cn。任何要连接到数据库的客户端应用程序或工具都必须对其连接字符串使用该新名称。对于未在中国服务中运行的应用程序,对 SQL 数据库服务器的引用可以是服务定义文件中的 DataConnectionString 值或其他 .NET 配置文件中的值。例如,
<configuration>
<connectionStrings>
<add name="SQLAzure" connectionString="Server=tcp:yourserver.devdatabase.chinacloudapi.cn;
Database=Test;User ID=login@server;Password=yourPassword;
Trusted_Connection=False;Encrypt=True;"/>
</connectionStrings>
</configuration>

服务总线和Active Directory


Active Directory

Windows Azure Active Directory(“Windows Azure AD”)提供身份和访问功能,可用于内部部署和云应用。开发人员可以使用Windows Azure AD功能为企业应用和软件作为服务(SaaS)的供应商实现单点登录和登出,使用图形API来查询和管理云的目录对象,整合内部部署来将Active Directory的目录数据同步到云端。
中国服务中包含 Windows Azure AD。但按照设计,仍会存在一些影响开发人员体验的差异。中国服务是一种自定义的产品,该产品与全球服务有许多共同特性。自定义会导致出现以下差异,这些差异会对使用 Windows Azure AD 的开发人员造成影响。
· 不包含Access Control (访问控制)命名空间。如果您需要集成应用程序和与Windows Azure的身份验证服务同步企业目录,请使用Windows Azure中的Active Directory。在 Windows Azure管理门户中,单击“Active Directory"。
· ACS管理门户仅适用于服务总线命名空间。
·授权。对于本地应用程序和服务器到服务器案例,目前尚不支持 OAuth 2.0 授权代码授予类型的预览功能。
除了这些基于设计的差异之外,中国服务中的 Windows Azure AD 设计与全球服务相同。有关世纪互联服务中的 Windows Azure AD的信息,请参见如何使用 Windows Azure Active Directory 访问控制对 Web 用户进行身份验证
注意:在公共预览期间创建的访问控制命名空间将不可操作或访问。然而,类似的功能可在Windows Azure管理门户的Active Directory使用。

服务总线配置

您可以通过以下方法之一将使用服务总线的应用程序重定向至特定端口
选项 1使用环境变量重定向各个或所有应用程序。
选项 2使用 ServiceBus.config 文件重定向各个应用程序。
选项 3使用 ServiceBus.config 文件重定向所有应用程序。
如果您运行的是 EXE 文件或辅助角色,则所有选项都将可用。如果您运行的是 Web 角色,则仅选项 3 可用。
无论方法如何,端点名称都会更改,如下表所示。

服务总线端点
等效的中国 Windows Azure 服务总线端点
servicebus.windows.net
servicebus. chinacloudapi.cn
accesscontrol.windows.net
accesscontrol. chinacloudapi.cn

选项 1:要使用环境变量进行重定向,请执行以下操作:
1.考虑设置变量的级别。为整个计算机、一个用户还是运行单个应用程序的环境设置环境变量所带来影响不一样。
2.以适当的级别设置以下环境变量:
RELAYHOST=servicebus.chinacloudapi.cn
STSHOST=accesscontrol.chinacloudapi.cn
RELAYENV=Custom
警告: 通过 Web 角色的 csdef 文件中的 <environment> 标记添加环境变量时,该选项不可用。Web 角色在 w3wp.exe 的上下文中运行。环境变量不会传播至 w3wp.exe 环境。请参见 Web 角色的选项 3。
选项 2:要使用 ServiceBus.config 文件重定向各个应用程序,请执行以下操作:
1.使用适当的主机信息创建具有以下内容的 ServiceBus.config 文件。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<Microsoft.ServiceBus>
<relayHostName>servicebus.chinacloudapi.cn</relayHostName>
<stsHostName>accesscontrol.chinacloudapi.cn</stsHostName>
</Microsoft.ServiceBus>
</configuration>

2.将 ServiceBus.config 文件与服务总线/ACS 应用程序的 .exe 文件放在相同的目录中。
此选项将不会用于 Web 角色,因为这些角色在 w3wp.exe 上下文中运行。因此,系统在%Windir%\System32\inetsrv\ 中查找 servicebus.config 文件时,该文件不存在。
选项 3:要使用 ServiceBus.config 文件重定向所有应用程序,请执行以下操作:
1.在 .NET Framework 配置目录中查找现有 ServiceBus.config 文件。.NET Framework 配置目录取决于 32 位或 64 位的操作系统版本和已安装的框架版本,以下为常用位置。

Microsoft .NET Framework 版本
操作系统版本
目录
2.0 至 3.5
32 位
%Windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG
2.0 至 3.5
64 位
%Windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG
4.0
32 位
%Windir%\Microsoft.NET\Framework\v4.0.30319\Config
4.0
64 位
%Windir%\Microsoft.NET\Framework64\v4.0.30319\Config

2.如果目录中存在现有 ServiceBus.config 文件,则必须编辑该文件以添加选项 2 中概述的 XML 配置(使用 ServiceBus.config 的单个重定向)。如果添加该配置会与现有 ServiceBus.config 文件中已存在的信息冲突,则不能使用此选项。必须使用选项 1 或 2。
除非知道角色使用的框架,否则不可能指向特定的框架目录。但是,以下脚本概括了使用 Web 角色的复制过程。如果servicebus.config 文件存在,该脚本会将此文件复制到每个 .NET 目录中。
@echo off
pushd .
cd %windir%\Microsoft.Net\Framework64\
REM set copylocal=true on servicebus.config so its present in bin dir
for /f %%i in ('dir /s /b config') do copy /y %~dp0servicebus.config %%~fi
popd

使用服务管理 API

通过服务管理 API,开发人员可以对 Windows Azure 中运行的托管服务进行部署管理。事实上,全球服务和中国服务的管理门户都使用服务管理 API。
全球服务使用的路径为https://management.core.windows.net。为中国服务编写代码的开发人员应使用的路径为https://management.core.chinacloudapi.cn
有关详细信息,请参阅访问服务管理资源关于服务管理 API

将自定义域名重定向到中国服务中的托管服务

如果您使用的自定义域名转发到在全球服务中运行的托管服务,并将该托管服务移动到中国服务中,则必须更新转发的域以指向中国的新特定端点。
例如,如果将 www.contoso.com 重定向到在 contoso.cloudapp.net 运行的 Web 角色,现在必须将其重定向到contoso.chinacloudapp.cn。有关详细信息,请参阅如何为 Windows Azure 托管服务配置自定义域
组织可以使用其 DNS 服务器上的 CNAME 条目转发域。中国服务不包括允许自定义域名注册或转发的功能。

对中国服务使用 VM 角色

使用 VM 角色和 CSUpload

使用 VM 角色时,请更改 CSUpload 端点以便使用特定于中国的 URI。例如:
csuploadSet-Connection"SubscriptionId=<subscriptionId>;CertificateThumbprint=<certThumbprint>;
ServiceManagementEndpoint=https://management.
core.chinacloudapi.cn"

修改代码示例和工具

下面列出了部分工具和示例及其要在世纪互联服务上运行所需的更改。

常规工具

开发人员应该识别引用全球服务计算 (*.cloudapp.net) 或存储端点 (*.core.windows.net) 的内部工具或应用程序,并对其进行更新以便使用特定于中国的端点。按照端点映射中的表,替换可在配置文件或这些工具的代码中找到的各个字符串。
其中的示例包括存储资源管理器工具以及存储上传和下载工具。本节中列出了一些工具,但该列表并不完整。

Visual Studio 服务器资源管理器

可以使用 Visual Studio 中的服务器资源管理器浏览适用于所有中国订阅的计算、服务总线、存储以及虚拟机资源。用户导入发布设置文件时,Visual Studio 将获取中国存储端点。
Windows Azure Tools for Visual Studio 入门中逐步介绍了使用服务器资源管理器创建、编译、调试、上传以及查看 Windows Azure Hello World 应用程序的完整过程。将中国订阅导入 Visual Studio 后,这些说明即可在中国安装上使用。
还可以查看已经在中国服务上但未使用 Visual Studio 部署的计算、服务总线、存储或虚拟机资源。按照使用 Windows Azure 计算资源管理器查看 Azure 应用程序的状态中的说明查看已经在世纪互联服务上运行的一个或多个托管服务的状态。按照使用 Windows Azure存储资源管理器浏览存储资源中的说明查看中国服务上运行的现有存储帐户中的对象。

CSManage - Windows Azure 服务管理示例

CSManage 示例(最近更名为“Windows Azure 服务管理示例”)使用服务管理 API。此示例包含指向全球服务的代码。必须找到对http://*.windows.net的引用并将其更新为 *.chinacloudapi.cn。可以在服务管理示例中下载 CSManage 示例。

为中国服务更新 ServiceBus SDK 中的 PlainHttp 示例

当在中国运行时,需要对 PlainHttp 示例中的 URL 进行多项更新。按照以下步骤更新该示例。
1.打开此示例的根文件夹:WindowsAzureAppFabricSDKSamples_V1.0-CS\ServiceBus\ExploringFeatures\MessageBuffer\PlainHttp
2.导航到 MessageBufferClient 子文件夹并编辑 MainPage.xaml.cs
3.将所有windows.net实例更改为 *.chinacloudapi.cn。参见第 31、77 和 98 行。

使用 Windows Azure 诊断

Windows Azure 诊断使用开发计算机上的本地存储或中国服务存储帐户来存储诊断信息。有关详细信息,请参阅使用 Windows Azure诊断收集日志记录数据
例如,您的代码可能包含以下行
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
并且在 servicedefinition.cscfg 文件包含以下配置信息。
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="<YourStorageString>" />
</ConfigurationSettings>
<YourStorageString>的值为自定义端点并包括世纪互联服务的 URI。

重新颁发 HTTPS 端点的证书

使用自定义域名时无需对证书进行更改。
如果任何现有应用程序使用 HTTPS 端点并将证书绑定到https://*.cloudapp.net(其中 * 为您的服务名称),则必须为*.chinacloudapp.cn 重新颁发这些证书。在中国部署该服务时,必须使用这些新证书。

使用 Windows Azure PowerShell

要对中国服务使用Windows Azure PowerShell,请运行Get-AzurePublishSettingsFile -Environment "AzureChinaCloud" 来获取正确的publish settings文件。然后使用Import-AzurePublishSettingsFile导入。

使用 Node.js 的 Windows Azure SDK

要对中国服务使用 SDK,需要从门户或通过 CLI 提供连接字符串。
存储、服务总线和通知总线
所有这些都接受各自的连接字符串,您可以从门户或使用 CLI 获得该值。
var tableService = azure.createTableService(storageConn);
var blobService= azure.createBlobService(storageConn);
var queueService = azure.createQueueService(storageConn);
var serviceBusService = azure.createServiceBusService(sbConn);
var notificationHubService = azure.createNotificationHubService(nhConn);
SQL
要管理 SQL 数据库服务器,可以使用此配置:
var sqlManagementService = azure.createSqlManagementService(subscriptionId, authentication, hostOptions);

附录:Windows Azure 的内容库

下面列出了目前可用于 Windows Azure 的所有内容资产,并指出该资产是否专门针对中国服务。

资产
内容是否专为中国创建
说明
windowsazure.com
Windows Azure 的全球门户。
windowsazure.cn
专为在中国运营的 Windows Azure 构建的门户
Windows Azure 案例研究
中国案例研究
P&P 丛书

MVP 的著作
MSDN 库
不一定
Windows Azure 团队的博客
不一定
MSDN Azure 门户
MSDN 杂志
虚拟实验室
视频
第 9 频道的视频讨论全球服务,与优酷上的中国视频 (http://www.youku.com/playlist_show/id_19321941.html)相同
Windows Azure 培训包
Github 中的本地化培训包用于全球服务
MSDN 代码库
Github
我们仅在此处托管 windowsazure.com 的英文内容,不提供本地化内容