问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在Windows Azure上用其它Web服务器

发布网友 发布时间:2022-10-18 15:07

我来回答

2个回答

热心网友 时间:2023-11-18 14:18

azure website支持的运行时不少了, 直接照着他的路子做其实挺好.
如果硬要用自己的一套, 比如tomcat, 只能起vm自己弄了.
不过在新的azure portal上, tomcat似乎也已web+mobile的属性出现了, 可以看看是怎么工作的.

热心网友 时间:2023-11-18 14:18

 在Windows Azure中,所有入站通信都是通过 ServiceDefinition.csdef 中声明的端点发生的,端点分为两种类型:输入端点和内部端点。输入端点是指暴露给互联网的端点,内部端点用于程序内部的通信。
  大多数时候,在Windows Azure Web角色中要使用输入端点,由IIS处理入站请求,然后将其路由给你的应用程序,如果要使用其它Web服务器(或其它类型的服务器,如SMTP或FTP),你需要用另一个Worker角色进行替换。
  输入点Worker角色
  要在Worker角色中使用输入端点,你需要做两件事情:
  1、在你的服务定义中定义输入端点。
  2、在指定的端口上监听入站通信。
  定义你的输入端点:
  定义一个输入端点很简单,如果你在使用Visual Studio,在你的Worker角色上双击,象下面这样增加一个新的端点。
  注意我这里协议选择了TCP,而不是HTTP,如果选择HTTP,通信内容将从http.sys通过,我不想这样,TCP给了我一样的访问,好像我在本地启动了一个Web服务器,直接监听80端口一样,当然端口选择80是为了符合HTTP标准。
  在Visual Studio中增加一个端点和在 ServiceDefinition.csdef 中手工添加以下代码的效果是一样的:
<Endpoints>
<InputEndpoint name="WorkerIn" protocol="tcp" port="80" />
</Endpoints>
  在指定的端口上监听通信:
  当你在端点定义中指定了一个端口后,Windows Azure就会通过负载均衡器把这个端口暴露在互联网上,来自负载均衡器的通信就会在一个不同的端口路由给你的应用程序,这个端口是由Windows Azure在运行时选择的。这意味着你需要调用Windows Azure运行时API确定你的应用程序应该监听哪个端口,下面的代码显示了为我们的端点查询API和确定正确端口:
public override void Run()
{
string mongooseroot = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + @"\", @"approot\mongoose");
int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WorkerIn"].IPEndpoint.Port;

Process p = new Process()
{
StartInfo = new ProcessStartInfo(Path.Combine(mongooseroot, @"mongoose-2.8.exe"), "-ports " + port)
{
UseShellExecute = false,
WorkingDirectory = mongooseroot
}
};

p.Start();
p.WaitForExit();
throw new Exception("Mongoose quit on me!");
}

  启动Web服务器
  至此,我们已经有一个端点,并且也知道要监听的端口了,接下来就可以通过WCF, TCPListener 或其它可行的方案开始监听通信了。
  在我们的例子中,我们希望运行一个外部进程(我们的Web服务器)来处理通信,下面是我们的Worker角色的run()方法全部代码,它启动了一个微小的Web服务器 Mongoose 。
 
  第一行理解起来可能是最困难的了,它负责找到 Mongoose 二进制文件(和Web内容)的正确位置,它使用了 %RoleRoot%\approot 路径变量,它从你的角色站点根目录开始遍历。
  注意在使用 Path.Combine() 前,需要给 %RoleRoot% 增加一个反斜线(\),如果你不这样做,你的代码在本地开发环境中测试时不会有问题,但在云中执行时就会失败,这是因为你角色的根的本地路径是一个目录,而在云中是一个驱动器,在云中,你会获得一个类似E:(注意这里没有反斜线)的根,追加上approot后,就成了 E:approot ,这是一个不正确的路径表示(应该是 E:\approot ),为了确保在本地和云中正确运行,最好加上反斜线。
  第二行是从本地变量中捕获正确的端口。
  接下来的代码启动一个新的 Mongoose 进程,将端口和工作目录传给它,这样 Mongoose 就可以发现我们的Web内容了。
  最后我们一直等待 Mongoose 进程退出,和你的run()方法一样,如果不出现错误, Mongoose 进程是永远不会退出的,因此当 Mongoose 退出时,我们一定是遇到异常了,退出时会向Windows Azure发出指示,表明进程遇到故障需要重启,我们的角色最后就会自动重启。
  用你的角色包Web服务器
  假设 Mongoose 是我要部署的Worker角色的一部分,为了确保 Mongoose 和我的Web内容在构建过程中会作为角色的一部分打包进去,需要在Visual Studio中设置它们,在构建时总是将它们复制到输出目录。
  立即尝试
  注意因为我们没有创建HTTP端点,Visual Studio不知道启动Web浏览器,要查看应用程序的运行情况,请打开 Development Fabric UI 先检查你在监听哪个端口,然后在浏览器中输入 localhost 和那个端口号就可以了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 涵虚混太清中混的读音是什么 涵虚混太清中混读什么音 新年快乐恭喜发财那些福袋怎么样拿的 请问合肥九中和十中哪个好 合肥10中怎么样 合肥十中去年一本的录取率多少? 怎样做少油少糖的蒸蛋糕最好吃 少油少糖的健康戚风蛋糕怎么做的 好吃的海鲜粥怎么做? 做字可以组什么词语 用做字组词 做字组词语 做字组词语有哪些 做组词语 做组词语有哪些 一元一次方程解决实际问题 有关一元一次方程的解决问题 爸爸我怀了你的孩结局 肚子天天咕咕叫叫 不痛 也不拉肚子 吃了饭也叫 怎么回事啊? 前几天吃了点阿胶,后面这几天总拉肚子想吐,肚子里像有气一样,咕噜咕噜的响,怎么办,难受? 怎么让QQ空间变成原来初始化的样子? eclipse怎么把带红叉的jar包删掉 英语九年级全一册44页语法翻译 如何挑选和储存鸭肝 焊工在焊接的时候所发出的光对身体有什么危害? 线路板菲林爆光对身体有什么伤害? chi热怎么写是个词语 是zhi 还是chi 热 抖音福袋领取? 如何做鲑鱼好吃 做蛙鱼的步骤 dnf机械战神时钟补丁怎么用 电子商务是属于什么专业的? 电子商务属于什么专业类别。 做了百度推广,光花钱但没有效果怎么办 如何解决百度竞价推广花钱没效果的问题 百度推广只花钱没有效果怎么办 描写人的现代诗欣赏 描写家人的现代诗 描写人性的现代诗 大象的天敌是老鼠吗? 老鼠是大象的克星吗 冯婧几年出生个人资料 冯婧的真实身高是多少 可惜没如果mv女二是不是冯婧