本文介绍如何使用C# SDK中的sample代码,来完成创建主题、创建订阅、启动HttpEndpoint、发布消息、查看HttpEndpoint接收消息和删除主题等操作。

步骤一:准备工作

  1. 下载最新版C# SDK,解压后将工程导入到VisualStudio。
  2. 找到工程里四个项目中SDK所在的项目AliyunSDK_MNS,右击项目名,选择重新生成,在bin目录下生成Aliyun.MNS.dll
    说明 其他几个项目里都需要引用Aliyun.MNS.dll,请配置好其他几个项目的引用。
  3. 在项目AliyunSDK_MNS_Sample里进行配置。
    1. 将项目AliyunSDK_MNS_Sample设置为启动项,将SyncTopicOperations.cs设置为启动对象。
    2. 打开SyncTopicOperations.cs文件,在文件的最上方配置AccessKeyId、AccessKeySecret和Endpoint。
      • AccessKeyId、AccessKeySecret
      • Endpoint
        • 访问消息服务MNS的接入地址,请登录MNS控制台,单击右上角获取Endpoint查看。
        • 不同地域的接入地址不同。

步骤二:创建主题

如果之前未创建主题,那么首先需要创建主题。默认创建的主题名称是TestCSharpTopic,也可以修改代码指定主题名称。

// 1.生成一个CreateTopicRequest实例,参数传入topicName。这里可以同时传入TopicAttributes,以便在CreateTopic时同时设置自定义的Topic属性。
var createTopicRequest = new CreateTopicRequest
{
    TopicName = _topicName
};

Topic topic = null;
try
{
    topic = client.CreateTopic(createTopicRequest);
    Console.WriteLine("Create topic successfully, topic name: {0}", topic.TopicName);
}
catch (MNSException me)
{
    // 2.可能因为网络错误,或者Topic已经存在等原因导致CreateTopic失败,这里CatchException并做对应的处理,也可以分别Catch TopicAlreadyExistException等做单独处理。
    Console.WriteLine("CreateTopic Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Create topic failed, exception info: " + ex.Message);
    return;
}          

步骤三:启动HttpEndpoint

  • 找到项目MNS_CSharp_SDK_Test,将SampleHttpServer.cs设为启动项目并运行。
    说明 SampleHttpServer依赖于.net framework 4.5。
  • 确认接收端有公网IP地址。
  • 功能
    • 消息服务MNS推送消息请求做签名验证。
    • 解析推送请求的Body。
    • 返回StatusCode:200。
  • 由于SampleHttpServer的代码较多,请直接查看SDK中的源码。

步骤四:创建订阅

在MNS Server中创建订阅,主题里面的消息应该推送到哪里。Sample里使用的是HTTP的Endpoint。

try
{
    // 1.生成SubscriptionAttributes,第二个参数是Subscription的Endpoint。请将"XXXX"改成步骤三中的IP和Port。更多支持的Endpoint类型请参见Subscription。
    SubscribeResponse res = topic.Subscribe(_subscriptionName, "http://XXXX");
    // 2.订阅成功。
    Console.WriteLine("Subscribe succeed");
}
catch (MNSException me)
{
    // 3.可能因为网络错误,或者同名的Subscription已存在等原因导致订阅出错,这里CatchException并做对应的处理。
    Console.WriteLine("Subscribe Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
}            

步骤五:发布消息

发布消息到主题中,并且期待在HttpServer上收到对应的消息。

try
{
    // 1.如果是推送到邮箱,还需要生成PublishMessageRequest并设置MessageAttributes。
    var response = topic.PublishMessage("message here </asdas\">");
    // 2.发布成功。
    Console.WriteLine("PublishMessage succeed! " + response.MessageId);
}
catch (MNSException me)
{
    // 3.可能因为网络错误等原因导致PublishMessage失败,这里CatchException并做对应处理。
    Console.WriteLine("PublishMessage Failed! ErrorCode: " + me.ErrorCode);
}
catch (Exception ex)
{
    Console.WriteLine("PublishMessage failed, exception info: " + ex.Message);
}           

步骤六:查看HttpEndpoint接收消息

  1. 消息服务MNS会将发布的消息推送给步骤三启动的HttpEndpoint。
  2. HttpEndpoint在接收到消息推送请求后,会打印到Console。

步骤七:取消订阅

如果不需要再接收消息,可以在MNS Server取消订阅。

try
{
    topic.Unsubscribe(_subscriptionName);
    Console.WriteLine("Unsubscribe succeed!");
}
catch (Exception ex)
{
    Console.WriteLine("Subscribe failed, exception info: " + ex.Message);
}           

步骤八:删除主题

最后删除这个主题。

try
{
    client.DeleteTopic(_topicName);
    Console.WriteLine("Delete topic succeed");
}
catch (Exception ex)
{
    Console.WriteLine("Delete topic failed, exception info: " + ex.Message);
}