哪个网站可以免费做国外网站,云服务器低价,协会网站改版建议,快速建站哪个平台好Windows Azure的服务总线允许在Web服务内部与外部之间做成一个公共的连接点#xff0c;在无需更改企业防火墙或者其他安全配置的情况下连接内部和外部的服务 而使用Azure云服务的时候由于缩放的原因通过IP来制定连接也是不科学的#xff0c;而中继服务则可以充当很好的公共连… Windows Azure的服务总线允许在Web服务内部与外部之间做成一个公共的连接点在无需更改企业防火墙或者其他安全配置的情况下连接内部和外部的服务 而使用Azure云服务的时候由于缩放的原因通过IP来制定连接也是不科学的而中继服务则可以充当很好的公共连接点当然一般建议使用更加科学的队列 在Azure的服务总线中有一个叫中继服务的东西是驻留在云端的一个帮助进行辅助连接工作的服务把客户端的调用请求通过Azure的中继服务然后转发给服务端。 对于无论客户端还是服务端中继服务其实更像就是一个地址用来表示一个服务然后大家都连接上同一个地址的话那么就可以交流沟通。 一般企业应用都会有防火墙而企业对外提供服务的时候通常会受到防火墙的限制而不得不对防火墙做额外配置。 有了服务总线则可以无需额外配置防火墙就能正常发布企业应用了。 任何模式下的中继服务在其他模式无法使用的时候最终都会尝试使用80跟443端口进行连接而一般的企业防火墙是不会封住这2个端口的企业总要上网吧 创建中继服务很简单基本等效于创建服务总线因为中继服务不能单独创建只能以编程的方式创建 创建服务总线可以在Azure门户那 点击 添加 然后输入命名空间命名空间可用没被注册那个名字然后选择地区和订阅在确定即创建了服务总线 创建之后 点击下方的 连接信息 然后找到默认颁发者和默认密钥 这个是日后连接到该服务总线的凭据需记录下保存好。。。 下面粗略的演示下如何使用服务总线 以下以基于WCF为例演示如何使用服务总线进行编程 服务总线可以在Microsoft.ServiceBus.dll的程序集里找到绝大部分的类型存在于 Microsoft.ServiceBus命名空间下。 可在VS的引用Nuget包那找到最新版 之后了解下WCF在中继服务那不是用正统的诸如wshttpbinding或者nettcpbinding一类的而是使用了中继服务特制版的绑定。 但是中继服务很好的兼容了WCF原有的编程架构其特制的绑定类型基本就是原本的类型后面加个relay 比如 NetTcpRelayBinding,WS2007HttpRelayBinding 等同时也有几个中继服务特有的绑定比如 NetOnewayRelayBinding和NetEventRelayBinding等 使用中继服务的编程基本跟普通的WCF编程模型大部分是一样的 但也有几点不同连接服务总线的时候先要使用前文所说的颁发者和颁发者密钥作为连接服务总线的信息总要知道你连接的是哪一条服务总线把 //定义了一个TransportClientEndpointBehavior类型的RelayCredentials属性
string ownner ServiceBus.Issuer;
string token ServiceBus.IssuerToken;
//ServiceBus的令牌优先检查Azure的配置文件如果没有读取本地的App.config用于本地调试
try
{this.issuer RoleEnvironment.GetConfigurationSettingValue(ownner);this.issuertoken RoleEnvironment.GetConfigurationSettingValue(token);
}
catch
{this.issuer ConfigurationManager.AppSettings[ownner];this.issuertoken ConfigurationManager.AppSettings[token];
}
RelayCredentials new TransportClientEndpointBehavior(); //配置服务总线共享密钥
RelayCredentials.TokenProvider TokenProvider.CreateSharedSecretTokenProvider(issuer, issuertoken); 由于很多使用中继服务是放在云服务上用的所以个人一般用法是先在Role的配置文件里cscfg读取如果不是云服务环境则会引发异常然后在catch里读取本地配置文件app.config或者web.config 读取成功了就把值通过TokenProvider.CreateSharedSecretTokenProvider(issuer, issuertoken)赋给RelayCredentials.TokenProvider 注意这里的RelayCredentials是一个EndpointBehavior 有了这个之后就可以大部分的跟正常WCF一样进行编程了 //生成ServiceHost
//ServiceInstanc是假定的服务实例
ServiceHost sh new ServiceHost(typeof(ServiceInstance));
//服务总线的URI
//注意除了http和https之外的所有其他协议都用sb类型
//比如net.tcp之类的都必须使用sb开头的
//三个参数分别是 协议 命名空间 服务名
//命名空间需跟申请服务总线的那个命名空间一致
Uri address ServiceBusEnvironment.CreateServiceUri(sb, servicenNamespace, serviceName);
//终结点添加到ServiceHost
//使用NettcpRelayBinding
//ServiceContract是假定的服务契约
sh.AddServiceEndpoint(typeof(ServiceContract), new NettcpRelayBinding(), address);
//所有终结点添加服务总线令牌
foreach (var endpoint in sh.Description.Endpoints)
{endpoint.EndpointBehaviors.Add(RelayCredentials); //上部分中获得的服务令牌的那个Endpoint
} //在此用foreach有点儿画蛇添足但假如终结点多的话可以通过这种方式来添加
sh.Open();//启动服务 一旦服务总线启动成功并且连接上了中继服务那么就可以在Azure的门户里查看到相关的信息 此处没有任何连接信息如果连接上了的话这里就会有对应的信息 转载于:https://blog.51cto.com/virtualcca/1290246