本文介绍如何使用 .NET SDK 以不同方式连接到事件中心。 示例使用 EventHubProducerClient,后者用于将消息发送到事件中心。 可以使用 EventHubConsumerClient 的构造函数的类似变体从事件中心使用事件。
本部分介绍如何使用命名空间或事件中心的连接字符串连接到事件中心。
如果有命名空间和事件中心名称的连接字符串,请使用具有连接字符串和事件中心名称参数的 EventHubProducerClient 构造函数。
// Use the constructor that takes the connection string to the namespace and event hub name
producerClient = new EventHubProducerClient(NAMESPACE-CONNECTIONSTRING, EVENTHUBNAME);
也可以将 ;EntityPath=<EVENTHUBNAME>
追加到命名空间的连接字符串,使用仅采用此连接字符串的构造函数。
// Use the constructor that takes the connection string to the namespace and event hub name
producerClient = new EventHubProducerClient(connectionString);
如果有事件中心(而不是命名空间)的连接字符串,也可以使用此构造函数。
以下示例演示如何使用为事件中心创建的 SAS 策略的名称和值连接到事件中心。
//use the constructor that takes AzureNamedKeyCredential parameter
producerClient = new EventHubProducerClient("<NAMESPACENAME>.servicebus.chinacloudapi.cn", "EVENTHUBNAME", new AzureNamedKeyCredential("SASPOLICYNAME", "KEYVALUE"));
以下示例演示如何使用通过 SAS 策略生成的 SAS 令牌连接到事件中心。
var token = createToken("NAMESPACENAME.servicebus.chinacloudapi.cn", "SASPOLICYNAME", "KEYVALUE");
producerClient = new EventHubProducerClient("NAMESPACENAME.servicebus.chinacloudapi.cn", "EVENTHUBNAME", new AzureSasCredential(token));
下面是使用 SAS 策略和密钥值生成令牌的示例代码:
private static string createToken(string resourceUri, string keyName, string key)
{
TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1);
var week = 60 * 60 * 24 * 7;
var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week);
string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry;
HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key));
var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}", HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName);
return sasToken;
}
- 创建 Microsoft Entra 应用程序。
- 将应用程序的服务主体分配到相应的基于角色的访问控制 (RBAC) 角色(所有者、发送方或接收方)。 有关详细信息,请参阅使用 Microsoft Entra ID 授予访问权限。
var clientSecretCredential = new ClientSecretCredential("TENANTID", "CLIENTID", "CLIENTSECRET");
producerClient = new EventHubProducerClient("NAMESPACENAME.servicebus.chinacloudapi.cn", "EVENTHUBNAME", clientSecretCredential);
在 GitHub 上查看示例: