Windows Azure Appfabric Service Bus Code
来源:互联网 发布:nginx 目录重定向 编辑:程序博客网 时间:2024/05/05 13:15
Service Bus
Queue
- QueueDescription
- Session
- Duplicate Message Detect
- Transaction
- Defer Message
- Delete Letter Queue
Sender:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.WindowsAzure;using Microsoft.WindowsAzure.StorageClient;using System.Threading.Tasks;using System.IO;using System.Collections.Specialized;using System.Data.Services.Client;using System.Threading;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.Transactions;namespace AzureTest{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; string queuename = "newqueue"; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); MessagingFactory factory = null; /***********************NameSpace*****************************************/ NamespaceManager namespaceClient = new NamespaceManager(serviceUri, credentials); if (namespaceClient == null) { Console.WriteLine("\nUnexpected Error: NamespaceManager is NULL"); return; } // Configure Queue Settings QueueDescription queueDescription = new QueueDescription(queuename); //queueDescription.RequiresSession = true; queueDescription.RequiresDuplicateDetection = true;//duplicate messages are detected and dropped by the queue itself // Delete if exists if (namespaceClient.QueueExists(queueDescription.Path)) { //namespaceClient.DeleteQueue(queuename); Console.WriteLine("\nQueue is existing"); } else { namespaceClient.CreateQueue(queueDescription); } /***********************QueueClient*****************************************/ factory = MessagingFactory.Create(serviceUri, credentials); QueueClient myQueueClient = factory.CreateQueueClient(queuename); //1.....................Send Normal Message //BrokeredMessage message = new BrokeredMessage("issueBody"); //myQueueClient.Send(message); //Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); //2......................Send Session Message //BrokeredMessage sessionmessage = new BrokeredMessage("session 1 issue Body"); //sessionmessage.SessionId = "1"; //myQueueClient.Send(sessionmessage); //Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", sessionmessage.MessageId, sessionmessage.GetBody<string>())); //BrokeredMessage sessionmessage2 = new BrokeredMessage("session 2 issue Body"); //sessionmessage2.SessionId = "2"; //myQueueClient.Send(sessionmessage2); //Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", sessionmessage2.MessageId, sessionmessage2.GetBody<string>())); //3......................Send duplicate message //BrokeredMessage message = new BrokeredMessage("issueBody"); //message.MessageId = "123"; //myQueueClient.Send(message); //BrokeredMessage message2 = new BrokeredMessage("issueBody"); //message2.MessageId = "123"; //myQueueClient.Send(message2); //BrokeredMessage message3 = new BrokeredMessage("issueBody"); //message3.MessageId = "123"; //myQueueClient.Send(message3); //4........................Defer Message Sample //BrokeredMessage message = new BrokeredMessage("issueBody"); //message.MessageId = "123"; //myQueueClient.Send(message); //BrokeredMessage message2 = new BrokeredMessage("issueBody"); //message2.MessageId = "456"; //myQueueClient.Send(message2); //Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); //5.........................Transaction //using (TransactionScope scope = new TransactionScope()) //{ // //Scenarios: Only when recieve a message and process then send a new message // // This call to Send(BrokeredMessage) takes part in the local transaction and will // // not persist until the transaction Commits; if the transaction is not committed, // // the operation will Rollback // //sender.Send(replyMessage); // // This call to Complete() also takes part in the local transaction and will not // // persist until the transaction Commits; if the transaction is not committed, the // // operation will Rollback // //receivedMessage.Complete(); //} //6.................Log the dead-lettered messages that could not be processed BrokeredMessage message = new BrokeredMessage("issueBody"); message.MessageId = "123"; myQueueClient.Send(message); Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); Console.WriteLine("End"); Console.ReadKey(); } }}
Receiver:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;namespace Receiver{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; string queuename = "newqueue"; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); MessagingFactory factory = null; /***********************NameSpace*****************************************/ NamespaceManager namespaceClient = new NamespaceManager(serviceUri, credentials); if (namespaceClient == null) { Console.WriteLine("\nUnexpected Error: NamespaceManager is NULL"); return; } QueueDescription queueDescription = namespaceClient.GetQueue(queuename); if (queueDescription == null) { Console.WriteLine("\nUnexpected Error: QueueDescription is NULL"); return; } /***********************QueueClient*****************************************/ factory = MessagingFactory.Create(serviceUri, credentials); QueueClient myQueueClient = factory.CreateQueueClient(queuename,ReceiveMode.PeekLock); long messageCount = queueDescription.MessageCount; //1.......................Receive All Message //BrokeredMessage message; //for (long count = 0; count < messageCount; count++) //{ // message = myQueueClient.Receive(TimeSpan.FromSeconds(5)); // if (message != null) // { // Console.WriteLine(string.Format("Message received: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); // // Further custom message processing could go here... // message.Complete(); // } // else // { // Console.WriteLine("Unexpected Error, Did not receive the messages"); // } //} //2.........................Receive only Session Message - only receive session id="1" //MessageSession sessionReceiver = myQueueClient.AcceptMessageSession("1",TimeSpan.FromSeconds(60)); //Console.WriteLine("sessionReceiver Session ID:" + sessionReceiver.SessionId); //BrokeredMessage receivedMessage; //while ((receivedMessage = sessionReceiver.Receive(TimeSpan.FromSeconds(15))) != null) //{ // string sessionId = sessionReceiver.SessionId; // receivedMessage.Complete(); // Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}, SessionId={2}", // receivedMessage.MessageId, // receivedMessage.GetBody<string>(), // receivedMessage.SessionId)); //} //3......................Duplicate Message detect //string receivedMessageId = ""; //while (true) //{ // BrokeredMessage receiveMessage = myQueueClient.Receive(TimeSpan.FromSeconds(10)); // if (receiveMessage == null) // { // break; // } // else // { // Console.WriteLine("\t<= Received a message with messageId {0}", receiveMessage.MessageId); // receiveMessage.Complete(); // if (receivedMessageId.Equals(receiveMessage.MessageId, StringComparison.OrdinalIgnoreCase)) // { // Console.WriteLine("\t\tRECEIVED a DUPLICATE MESSAGE"); // } // receivedMessageId = receiveMessage.MessageId; // } //} //4...................Defer Message //long deferMessageSequenceNumber=0; //while (true) //{ // BrokeredMessage receiveMessage = myQueueClient.Receive(TimeSpan.FromSeconds(10)); // if (receiveMessage == null) // { // break; // } // else // { // if (receiveMessage.MessageId.Equals("123")) // { // receiveMessage.Defer(); // deferMessageSequenceNumber = receiveMessage.SequenceNumber; // } // else // { // Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", receiveMessage.MessageId, receiveMessage.GetBody<string>())); // } // } //} //BrokeredMessage deferMessage = myQueueClient.Receive(deferMessageSequenceNumber); //Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", deferMessage.MessageId, deferMessage.GetBody<string>())); //5.........................Transaction(Ignore) //6.........................Log the dead-lettered messages that could not be processed BrokeredMessage receiveMessage = myQueueClient.Receive(TimeSpan.FromSeconds(10)); receiveMessage.DeadLetter("UnableToProcess", "Failed to process in reasonable attempts"); QueueClient deadLetterClient = factory.CreateQueueClient(QueueClient.FormatDeadLetterPath(myQueueClient.Path), ReceiveMode.ReceiveAndDelete); BrokeredMessage receivedDeadLetterMessage; while ((receivedDeadLetterMessage = deadLetterClient.Receive(TimeSpan.FromSeconds(10))) != null) { Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", receivedDeadLetterMessage.MessageId, receivedDeadLetterMessage.GetBody<string>())); } Console.WriteLine("End"); Console.ReadKey(); } }}
Topic
- Routing, subscriber to different subscription
- Filter, filter message by property
Sender
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.WindowsAzure;using Microsoft.WindowsAzure.StorageClient;using System.Threading.Tasks;using System.IO;using System.Collections.Specialized;using System.Data.Services.Client;using System.Threading;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.Transactions;namespace AzureTest{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); /***********************NameSpace*****************************************/ NamespaceManager namespaceClient = new NamespaceManager(serviceUri, credentials); if (namespaceClient == null) { Console.WriteLine("\nUnexpected Error: NamespaceManager is NULL"); return; } TopicDescription myTopic=null; SubscriptionDescription myAuditSubscription = null; SubscriptionDescription myAgentSubscription = null; SubscriptionDescription myFilterSubscription = null; if (!namespaceClient.TopicExists("IssueTrackingTopic")) { myTopic = namespaceClient.CreateTopic("IssueTrackingTopic"); } else { myTopic = namespaceClient.GetTopic("IssueTrackingTopic"); } if (!namespaceClient.SubscriptionExists("IssueTrackingTopic", "AuditSubscription")) { myAuditSubscription = namespaceClient.CreateSubscription(myTopic.Path, "AuditSubscription"); } else { myAuditSubscription = namespaceClient.GetSubscription(myTopic.Path, "AuditSubscription"); } if (!namespaceClient.SubscriptionExists("IssueTrackingTopic", "AgentSubscription")) { myAgentSubscription = namespaceClient.CreateSubscription(myTopic.Path, "AgentSubscription"); } else { myAgentSubscription = namespaceClient.GetSubscription(myTopic.Path, "AgentSubscription"); } if (!namespaceClient.SubscriptionExists("IssueTrackingTopic", "FilterSubscription")) { myFilterSubscription = namespaceClient.CreateSubscription(myTopic.Path, "FilterSubscription", new SqlFilter("color = 'blue' AND quantity = 10")); } else { myFilterSubscription = namespaceClient.GetSubscription(myTopic.Path, "FilterSubscription"); } MessagingFactory factory = MessagingFactory.Create(serviceUri, credentials); TopicClient myTopicClient = factory.CreateTopicClient(myTopic.Path); BrokeredMessage message = new BrokeredMessage("messageissue"); myTopicClient.Send(message); Console.WriteLine( string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); BrokeredMessage message2 = new BrokeredMessage("messageissue2"); myTopicClient.Send(message2); Console.WriteLine( string.Format("Message sent: Id = {0}, Body = {1}", message2.MessageId, message2.GetBody<string>())); BrokeredMessage message3 = new BrokeredMessage("message3"); message3.CorrelationId = "high"; message3.Properties.Add("color", "blue"); message3.Properties.Add("quantity", 10); myTopicClient.Send(message3); Console.WriteLine( string.Format("Message sent: Id = {0}, Body = {1}", message3.MessageId, message3.GetBody<string>())); BrokeredMessage message4 = new BrokeredMessage("message4"); message4.CorrelationId = "low"; message4.Properties.Add("color", "white"); message4.Properties.Add("quantity", "10"); myTopicClient.Send(message4); Console.WriteLine( string.Format("Message sent: Id = {0}, Body = {1}", message4.MessageId, message4.GetBody<string>())); Console.WriteLine("End"); Console.ReadKey(); } }}
Receiver
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;namespace Receiver{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); /***********************NameSpace*****************************************/ NamespaceManager namespaceClient = new NamespaceManager(serviceUri, credentials); if (namespaceClient == null) { Console.WriteLine("\nUnexpected Error: NamespaceManager is NULL"); return; } MessagingFactory factory = MessagingFactory.Create(serviceUri, credentials); //1...............................Routing SubscriptionClient agentSubscriptionClient = factory.CreateSubscriptionClient("IssueTrackingTopic", "AgentSubscription", ReceiveMode.PeekLock); SubscriptionClient auditSubscriptionClient = factory.CreateSubscriptionClient("IssueTrackingTopic", "AuditSubscription", ReceiveMode.ReceiveAndDelete); BrokeredMessage message; while ((message = agentSubscriptionClient.Receive(TimeSpan.FromSeconds(5))) != null) { Console.WriteLine("\nReceiving message from AgentSubscription..."); Console.WriteLine(string.Format("Message received: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); // Further custom message processing could go here... message.Complete(); } // Create a receiver using ReceiveAndDelete mode while ((message = auditSubscriptionClient.Receive(TimeSpan.FromSeconds(5))) != null) { Console.WriteLine("\nReceiving message from AuditSubscription..."); Console.WriteLine(string.Format("Message received: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); // Further custom message processing could go here... } //2..............................Filter SubscriptionClient filterSubscriptionClient = factory.CreateSubscriptionClient("IssueTrackingTopic", "FilterSubscription", ReceiveMode.ReceiveAndDelete); // Create a receiver using ReceiveAndDelete mode while ((message = filterSubscriptionClient.Receive(TimeSpan.FromSeconds(5))) != null) { Console.WriteLine("\nReceiving message from filterSubscription..."); Console.WriteLine(string.Format("Filtered Message received: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); // Further custom message processing could go here... } Console.WriteLine("End"); Console.ReadKey(); } }}
Relay Service
Server
Note: when ServiceRegistrySettings is public discovery, you will able to see the feed "Temperature Service" in the https://youaretheone.servicebus.windows.net/
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.WindowsAzure;using Microsoft.WindowsAzure.StorageClient;using System.Threading.Tasks;using System.IO;using System.Collections.Specialized;using System.Data.Services.Client;using System.Threading;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.Transactions;using System.ServiceModel;namespace AzureTest{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Console.WriteLine("Server"); ServiceRegistrySettings registryBehavior = new ServiceRegistrySettings() { DiscoveryMode = DiscoveryType.Public, DisplayName = "Temperature Service" }; TransportClientEndpointBehavior credentialBehavior = new TransportClientEndpointBehavior(); credentialBehavior.TokenProvider = credentials; Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); using (ServiceHost serviceHost = new ServiceHost(typeof(TemperatureService), serviceUri)) { NetTcpRelayBinding binding = new NetTcpRelayBinding(); serviceHost.AddServiceEndpoint(typeof(ITemperatureContract), binding, serviceUri); serviceHost.Description.Endpoints[0].Behaviors.Add( credentialBehavior); serviceHost.Description.Endpoints[0].Behaviors.Add( registryBehavior); serviceHost.Open(); Console.WriteLine("Press Enter to exit."); Console.ReadLine(); } Console.WriteLine("End"); Console.ReadKey(); } }}
Client:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.ServiceModel;using AzureTest;namespace Receiver{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, string.Empty); Console.WriteLine("Client"); TransportClientEndpointBehavior credentialBehavior =new TransportClientEndpointBehavior(); credentialBehavior.TokenProvider = credentials; NetTcpRelayBinding binding = new NetTcpRelayBinding(); EndpointAddress endpointAddress = new EndpointAddress(serviceUri); using (ChannelFactory<ITemperatureContract> channelFactory = new ChannelFactory<ITemperatureContract>( binding, endpointAddress)) { channelFactory.Endpoint.Behaviors.Add(credentialBehavior); ITemperatureContract channel =channelFactory.CreateChannel(); ((ICommunicationObject)channel).Open(); Double boilingPointCelsius = channel.ToCelsius(212); Double boilingPointFahrenheit = channel.ToFahrenheit(boilingPointCelsius); Console.WriteLine("212 Fahrenheit is {0} celsius", boilingPointCelsius); Console.WriteLine("{0} celsius is {1} Fahrenheit", boilingPointCelsius, boilingPointFahrenheit); ((ICommunicationObject)channel).Close(); Console.WriteLine("Press Enter to exit."); Console.ReadLine(); } Console.WriteLine("End"); Console.ReadKey(); } }}
Publisher - Subscriber : netEventRelayBinding (Oneway)
- Subscriber: ALL WCF Services
Subscriber:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.WindowsAzure;using Microsoft.WindowsAzure.StorageClient;using System.Threading.Tasks;using System.IO;using System.Collections.Specialized;using System.Data.Services.Client;using System.Threading;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.Transactions;using System.ServiceModel;namespace AzureTest{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; string servicename = "AzureTest.TemperatureService"; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Console.WriteLine("Subscriber"); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, servicename); TransportClientEndpointBehavior credentialBehavior = new TransportClientEndpointBehavior(); credentialBehavior.TokenProvider = credentials; using (ServiceHost serviceHost = new ServiceHost(typeof(TemperatureService), serviceUri)) { serviceHost.Description.Endpoints[0].Behaviors.Add(credentialBehavior); serviceHost.Open(); Console.WriteLine("Press Enter to Exit"); Console.ReadLine(); } Console.WriteLine("End"); Console.ReadKey(); } }}
Subscriber Configuration
<system.serviceModel> <services> <service name="AzureTest.TemperatureService"> <endpoint name="RelayEndpoint" binding="netEventRelayBinding" contract="AzureTest.ITemperatureContract"/> </service> </services>
Publisher:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using Microsoft.ServiceBus;using Microsoft.ServiceBus.Messaging;using System.ServiceModel;using AzureTest;namespace Receiver{ class Program { static void Main(string[] args) { string issuename = System.Configuration.ConfigurationManager.AppSettings["servicebusissuename"]; string issuekey = System.Configuration.ConfigurationManager.AppSettings["servicebusissuekey"]; string servicenamespace = System.Configuration.ConfigurationManager.AppSettings["servicebusnamespace"]; string servicename = "AzureTest.TemperatureService"; //Token TokenProvider credentials = TokenProvider.CreateSharedSecretTokenProvider(issuename, issuekey); Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", servicenamespace, servicename); Console.WriteLine("Publisher"); TransportClientEndpointBehavior credentialBehavior =new TransportClientEndpointBehavior(); credentialBehavior.TokenProvider = credentials; EndpointAddress endpointAddress = new EndpointAddress(serviceUri); using (ChannelFactory<ITemperatureContract> channelFactory = new ChannelFactory<ITemperatureContract>( "RelayEndpoint")) { channelFactory.Endpoint.Behaviors.Add(credentialBehavior); ITemperatureContract channel =channelFactory.CreateChannel(); ((ICommunicationObject)channel).Open(); channel.ToCelsius(212); channel.ToFahrenheit(212); ((ICommunicationObject)channel).Close(); Console.WriteLine("Press Enter to exit."); Console.ReadLine(); } Console.WriteLine("End"); Console.ReadKey(); } }}
Publisher Configuration
<system.serviceModel> <client> <endpoint name="RelayEndpoint" address="sb://youaretheone.servicebus.windows.net/AzureTest.TemperatureService" binding="netEventRelayBinding" contract="AzureTest.ITemperatureContract"/> </client>
- Windows Azure Appfabric Service Bus Code
- Windows Azure Appfabric Service Bus Note
- Windows Azure AppFabric 入门教学系列 (二):一个简单的Service Bus例子
- Windows Azure平台AppFabric Service Bus和Access Control常见问题解答
- Windows Azure AppFabric概述
- Windows Azure AppFabric应用程序
- Windows Azure Service Bus - Bridge of Azure And Private Cloud
- Windows Azure Appfabric ACS Note
- Windows Azure AppFabric 入门教学系列 (五):初探Access Control Service
- Windows Azure平台简介(三):AppFabric
- Windows Azure AppFabric Caching入门简介
- Windows Azure AppFabric Caching服务发布!
- Windows Azure AppFabric 入门教学系列 (三):LABS环境
- Windows Azure(五-1) AppFabric介绍
- Windows Azure AppFabric 入门教学系列 (一):创建 AppFabric 项目与命名空间
- Windows Azure Service Bus 推动财务服务门户的高可用性和可伸缩性
- Azure学习笔记:Service Bus(2)
- Spring JMS with Azure Service Bus
- QT操作数据库时的内存泄漏解决
- sqlite日期类型怪鸟问题
- Ultrabook只是装着Windows的MacBook Air , 对许多应用或消费者来说,它可能不是领先平台
- android 兼容性测试 CTS 测试过程(实践测试验证通过)
- for循环执行过程
- Windows Azure Appfabric Service Bus Code
- 用js给属性为readonly的文本框赋值 无效的解决方法
- 【Android】Conversion to Dalvik format failed with error 1解决方案
- 如何提取Assembly中的DLL
- 试题:将阿拉伯数字转为罗马数字
- android学习问题集锦
- 学习makefile--1
- C语言:宏中"#"和"##"的用法
- ashx中使用session