private static void UnmarshallResult(XmlUnmarshallerContext context, GetTopicAttributesResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) { targetDepth += 2; } while (context.ReadAtDepth(originalDepth)) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("Attributes/entry", targetDepth)) { var unmarshaller = new KeyValueUnmarshaller <string, string, StringUnmarshaller, StringUnmarshaller>(StringUnmarshaller.Instance, StringUnmarshaller.Instance); var item = unmarshaller.Unmarshall(context); response.Attributes.Add(item); continue; } } } return; }
/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context) { GetTopicAttributesResponse response = new GetTopicAttributesResponse(); context.Read(); int targetDepth = context.CurrentDepth; while (context.ReadAtDepth(targetDepth)) { if (context.IsStartElement) { if (context.TestExpression("GetTopicAttributesResult", 2)) { UnmarshallResult(context, response); continue; } if (context.TestExpression("ResponseMetadata", 2)) { response.ResponseMetadata = ResponseMetadataUnmarshaller.Instance.Unmarshall(context); } } } return(response); }
private static void UnmarshallResult(XmlUnmarshallerContext context, GetTopicAttributesResponse response) { int originalDepth = context.CurrentDepth; int targetDepth = originalDepth + 1; if (context.IsStartOfDocument) { targetDepth += 2; } while (context.Read()) { if (context.IsStartElement || context.IsAttribute) { if (context.TestExpression("Attributes/entry", targetDepth)) { KeyValueUnmarshaller <string, string, StringUnmarshaller, StringUnmarshaller> unmarshaller = new KeyValueUnmarshaller <string, string, StringUnmarshaller, StringUnmarshaller>(StringUnmarshaller.GetInstance(), StringUnmarshaller.GetInstance()); KeyValuePair <string, string> kvp = unmarshaller.Unmarshall(context); response.Attributes.Add(kvp.Key, kvp.Value); continue; } } else if (context.IsEndElement && context.CurrentDepth < originalDepth) { return; } } return; }
protected async Task RemoveSubscriberFromSNSTopicTagAsync(string tag, Subscriber subscriber, bool checkDeleteTopic) { string subscribtionArn = subscriber.SNSSubscriptionArn; if (string.IsNullOrEmpty(subscribtionArn)) { DynamoSNSTopicTag snsTagEntry = await snsTopicTagTableOperator.GetTagForSubscriberAsync(tag, subscriber); if (snsTagEntry == null) { return; } subscribtionArn = snsTagEntry.SnsSubscriptionArn; } var t1 = snsClient.UnsubscribeAsync(subscribtionArn); var t2 = snsTopicTagTableOperator.RemoveSubsriberFromTagAsync(tag, subscriber); await Task.WhenAll(t1, t2); // await tagTableService.DecrementNumberOfSubscribers(tag, 1); if (checkDeleteTopic) { DynamoTag tagEntry = await tagTableOperator.GetTagAsync(tag); if (tagEntry != null) { // Topic attributes have out-of-date data. Check later GetTopicAttributesResponse taResponse = await snsClient.GetTopicAttributesAsync(tagEntry.SnsTopicArn); int numberOfSubs = 0; if (int.TryParse(taResponse.Attributes["SubscriptionsConfirmed"], out numberOfSubs)) { if (numberOfSubs <= 0) { await snsClient.DeleteTopicAsync(tagEntry.SnsTopicArn); await RemoveDynamoTagAsync(tagEntry.Tag); } } } } }
static void Main(string[] args) { var config = Newtonsoft.Json.JsonConvert.DeserializeObject <ConfigModel>(File.ReadAllText(@"E:\MNS.json")); _accessKeyId = config.AccessKeyId; _secretAccessKey = config.AccessKey; _endpoint = config.EndPoint; #region Topic Releated Test Cases IMNS client = new MNSClient(_accessKeyId, _secretAccessKey, _endpoint); /* 1.1. Create queue */ var createTopicRequest = new CreateTopicRequest { TopicName = _topicName }; Topic topic = null; try { client.DeleteTopic(_topicName); topic = client.CreateTopic(createTopicRequest); Console.WriteLine("Create topic successfully, topic name: {0}", topic.TopicName); } catch (Exception ex) { Console.WriteLine("Create topic failed, exception info: " + ex.Message); return; } topic = client.GetNativeTopic(_topicName); try { ListTopicResponse res = client.ListTopic(null, null, 10); Console.WriteLine("List topic successfully, topic name: {0}", _topicName); foreach (String topicUrl in res.TopicUrls) { Console.WriteLine(topicUrl); } if (res.NextMarker != null) { Console.WriteLine("NextMarker: " + res.NextMarker); } } catch (Exception ex) { Console.WriteLine("Delete topic failed, exception info: " + ex.Message); } try { GetTopicAttributesResponse res = topic.GetAttributes(); Console.WriteLine("GetTopicAttributes, topic name: {0}", _topicName); Console.WriteLine(res.Attributes.CreateTime); Console.WriteLine(res.Attributes.LastModifyTime); Console.WriteLine(res.Attributes.MaximumMessageSize); Console.WriteLine(res.Attributes.MessageRetentionPeriod); Console.WriteLine(res.Attributes.LoggingEnabled); } catch (Exception ex) { Console.WriteLine("GetTopicAttributes failed, exception info: " + ex.Message); } try { TopicAttributes attributes = new TopicAttributes() { MaximumMessageSize = 2048 }; topic.SetAttributes(attributes); Console.WriteLine("SetTopicAttributes succeed, topic name: {0}", _topicName); } catch (Exception ex) { Console.WriteLine("SetTopicAttributes failed, exception info: " + ex.Message + ex.GetType().Name); } try { SubscribeResponse res = topic.Subscribe(_subscriptionName, "http://XXXX"); Console.WriteLine("Subscribe, subscriptionUrl: {0}", res.SubscriptionUrl); } catch (Exception ex) { Console.WriteLine("Subscribe failed, exception info: " + ex.Message); } try { GetSubscriptionAttributeResponse res = topic.GetSubscriptionAttribute(_subscriptionName); Console.WriteLine("GetSubscriptionAttributeResponse, subs name: {0}", _subscriptionName); Console.WriteLine(res.Attributes.CreateTime); Console.WriteLine(res.Attributes.LastModifyTime); Console.WriteLine(res.Attributes.TopicName); Console.WriteLine(res.Attributes.TopicOwner); Console.WriteLine(res.Attributes.EndPoint); Console.WriteLine(res.Attributes.Strategy); } catch (Exception ex) { Console.WriteLine("GetSubscriptionAttribute failed, exception info: " + ex.Message); } try { SubscriptionAttributes attributes = new SubscriptionAttributes() { Strategy = SubscriptionAttributes.NotifyStrategy.EXPONENTIAL_DECAY_RETRY }; topic.SetSubscriptionAttribute(_subscriptionName, attributes); Console.WriteLine("SetSubscriptionAttribute succeed, topic name: {0}", _topicName); } catch (Exception ex) { Console.WriteLine("SetSubscriptionAttribute failed, exception info: " + ex.Message + ex.GetType().Name); } try { GetSubscriptionAttributeResponse res = topic.GetSubscriptionAttribute(_subscriptionName); Console.WriteLine("GetSubscriptionAttributeResponse, subs name: {0}", _subscriptionName); Console.WriteLine(res.Attributes.CreateTime); Console.WriteLine(res.Attributes.LastModifyTime); Console.WriteLine(res.Attributes.TopicName); Console.WriteLine(res.Attributes.TopicOwner); Console.WriteLine(res.Attributes.EndPoint); Console.WriteLine(res.Attributes.Strategy); Console.WriteLine(res.Attributes.ContentFormat); } catch (Exception ex) { Console.WriteLine("GetSubscriptionAttribute failed, exception info: " + ex.Message); } try { ListSubscriptionResponse res = topic.ListSubscription(""); Console.WriteLine("ListSubscription successfully, topic name: {0}", _topicName); foreach (String subscriptionUrl in res.SubscriptionUrls) { Console.WriteLine(subscriptionUrl); } if (res.NextMarker != null) { Console.WriteLine("NextMarker: " + res.NextMarker); } } catch (Exception ex) { Console.WriteLine("ListSubscription failed, exception info: " + ex.Message); } try { var response = topic.PublishMessage("message here </asdas\">"); Console.WriteLine("PublishMessage succeed! " + response.MessageId); } catch (Exception ex) { Console.WriteLine("PublishMessage failed, exception info: " + ex.Message); Console.WriteLine(ex.StackTrace); } try { topic.Unsubscribe(_subscriptionName); Console.WriteLine("Unsubscribe succeed!"); } catch (Exception ex) { Console.WriteLine("Subscribe failed, exception info: " + ex.Message); Console.WriteLine(ex.StackTrace); } //// PUBLISH MESSAGE for SMS //try //{ // var res = topic.Subscribe(_subscriptionName + "batchsms", topic.GenerateBatchSmsEndpoint()); // Console.WriteLine(res.SubscriptionUrl); // PublishMessageRequest request = new PublishMessageRequest(); // MessageAttributes messageAttributes = new MessageAttributes(); // BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes(); // batchSmsAttributes.FreeSignName = "陈舟锋"; // batchSmsAttributes.TemplateCode = "SMS_15535414"; // Dictionary<string, string> param = new Dictionary<string, string>(); // param.Add("name", "CSharpBatch"); // batchSmsAttributes.AddReceiver("13735576932", param); // messageAttributes.BatchSmsAttributes = batchSmsAttributes; // request.MessageAttributes = messageAttributes; // request.MessageBody = "</asdas\">"; // PublishMessageResponse resp = topic.PublishMessage(request); // Console.WriteLine(resp.MessageId); // // check sms // System.Threading.Thread.Sleep(3000); //} //catch (Exception ex) //{ // Console.WriteLine("Subscribe failed, exception info: " + ex.Message); //} //// PUBLISH MESSAGE for SMS //try //{ // var res = topic.Subscribe(_subscriptionName + "singlesms", topic.GenerateSmsEndpoint()); // Console.WriteLine(res.SubscriptionUrl); // PublishMessageRequest request = new PublishMessageRequest(); // MessageAttributes messageAttributes = new MessageAttributes(); // SmsAttributes smsAttributes = new SmsAttributes(); // smsAttributes.FreeSignName = "陈舟锋"; // smsAttributes.TemplateCode = "SMS_15535414"; // Dictionary<string, string> param = new Dictionary<string, string>(); // param.Add("name", "CSharpSingle"); // smsAttributes.Receiver = "13735576932"; // smsAttributes.SmsParams = param; // messageAttributes.SmsAttributes = smsAttributes; // request.MessageAttributes = messageAttributes; // request.MessageBody = "</asdas\">"; // PublishMessageResponse resp = topic.PublishMessage(request); // Console.WriteLine(resp.MessageId); // // check sms // System.Threading.Thread.Sleep(3000); //} //catch (Exception ex) //{ // Console.WriteLine("Subscribe failed, exception info: " + ex.Message); //} //// PUBLISH MESSAGE TO QUEUE AND MAIL //string queueName = "TestQueueNameHere"; //try //{ // var queue = client.CreateQueue(queueName); // var res = topic.Subscribe(_subscriptionName, topic.GenerateMailEndpoint("*****@*****.**")); // // res = topic.Subscribe(_subscriptionName + "2", topic.GenerateQueueEndpoint(queueName)); // res = topic.Subscribe(new SubscribeRequest(_subscriptionName + "2", topic.GenerateQueueEndpoint(queueName), "TAG", SubscriptionAttributes.NotifyStrategy.BACKOFF_RETRY, SubscriptionAttributes.NotifyContentFormat.JSON)); // PublishMessageRequest request = new PublishMessageRequest(); // MessageAttributes messageAttributes = new MessageAttributes(); // MailAttributes mailAttributes = new MailAttributes(); // mailAttributes.AccountName = "*****@*****.**"; // mailAttributes.Subject = "TestMail C#"; // mailAttributes.IsHtml = false; // mailAttributes.ReplyToAddress = false; // mailAttributes.AddressType = 0; // messageAttributes.MailAttributes = mailAttributes; // request.MessageAttributes = messageAttributes; // request.MessageTag = "TAG"; // request.MessageBody = "message here2222 </asdas\">"; // topic.PublishMessage(request); // var resp = queue.ReceiveMessage(30); // Console.WriteLine(resp.Message.Body); // // check mailbox // System.Threading.Thread.Sleep(3000); //} //catch (Exception ex) //{ // Console.WriteLine("Subscribe failed, exception info: " + ex.Message); //} //try //{ // client.DeleteQueue(queueName); //} //catch (Exception ex) //{ // Console.WriteLine("Delete queue failed, exception info: " + ex.Message); //} try { client.DeleteTopic(_topicName); Console.WriteLine("Delete topic successfully, topic name: {0}", _topicName); } catch (Exception ex) { Console.WriteLine("Delete topic failed, exception info: " + ex.Message); } #endregion Console.ReadKey(); }