diff --git a/_output/a-guide-to-common-azure-services.html b/_output/a-guide-to-common-azure-services.html index ffd700daf..a1a6190cf 100644 --- a/_output/a-guide-to-common-azure-services.html +++ b/_output/a-guide-to-common-azure-services.html @@ -1,2 +1,2 @@ -A Guide to Common Azure Services

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

A Guide to Common Azure Services

by George Kosmidis / Published 2 years ago

Introduction

In this article, we'll do a short overview of some of the most widely used Azure Services. In a bullet format, you'll quickly learn about their ideal use cases, which services complement them best, and where to avoid using them. Additionally, we'll note on important aspects such as backups, scalability, availability, and monitoring to help you make informed decisions when using these services. This article will be updated in the long run with new services, as demand and time allows.

Azure Services ToC alphabetically sorted

Azure Services

Backup and Recovery Services

Azure Backup
Azure Backup
A cloud-based backup and disaster recovery service.
Scenarios:
Best used for backing up and restoring critical business data, such as servers, virtual machines, and databases, from on-premises or in the cloud.
Use with:
Azure Backup integrates well with other Azure services like Azure Site Recovery for disaster recovery, Azure Storage for cost-effective data storage, and Azure Monitor for monitoring and alerts.
Not ideal:
Azure Backup is not suitable for real-time or continuous data backup or replication, use Azure Site Recovery instead.
Availability:
Azure Backup provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Backup scales to meet the changing needs of your organization, allowing you to store unlimited data in the cloud.
Monitoring:
Azure Backup provides a comprehensive set of monitoring and reporting capabilities, including real-time monitoring and alerts, backup reports, and detailed logs, to help you manage and troubleshoot your backup and restore operations.
Azure Site Recovery
Azure Site Recovery
A disaster recovery solution that helps organizations protect their critical applications and data from downtime and data loss in case of a disaster or a disruption.
Scenarios:
  • Disaster recovery: Azure Site Recovery provides a fully managed disaster recovery solution that helps organizations ensure the availability and resiliency of their critical applications and data.
  • Migration: Azure Site Recovery can be used to migrate applications and data to Azure, either as part of a disaster recovery plan or as a standalone migration solution.
Use with:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for applications and workloads that are protected by Azure Site Recovery.
  • Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of applications and workloads that are protected by Azure Site Recovery, and receive alerts and notifications in case of issues.
Not ideal:
Applications and workloads that are not critical, as Azure Site Recovery is designed for protecting critical applications and data, and may not be suitable for non-critical workloads.
Backup:
Not applicable.
Availability:
Azure Site Recovery is designed for high availability, and provides automatic failover and load balancing to ensure that your applications and data are always available.
Scalability:
Azure Site Recovery is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Site Recovery, and receive alerts and notifications in case of issues.

Cache Services

Azure Redis Cache
Azure Redis Cache
An in-memory data store that can be used as a cache or a data store and supports various data structures such as strings, hashes, and lists
Scenarios:
  • High-performance caching of frequently used data to speed up application response times.
  • Session management for web applications.
  • Real-time message notifications and broadcasting for online games or chat applications.
  • Storing and processing real-time analytics and sensor data from IoT devices.
Use with:
  • Azure Functions, can be used to process data stored in Azure Redis Cache and take actions based on the data.
  • Azure Stream Analytics, can be used to stream data from IoT devices into Azure Redis Cache for real-time analytics and reporting.
  • Azure Web Apps, can be used to host web applications that use Azure Redis Cache for session management and data caching.
Not ideal:
  • Applications that require strong consistency guarantees, as Redis Cache provides eventually consistent data.
  • Applications that require data persistence, as Redis Cache is an in-memory data store.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Redis Cache.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Redis Cache to another region.
Availability:
Azure Redis Cache is designed for high availability, with data automatically distributed across multiple cache nodes to ensure reliability and durability.
Scalability:
Azure Redis Cache is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Redis Cache, and receive alerts and notifications in case of issues.

Compute Services

Azure Container Apps
Azure Container Apps
A set of services in Azure that enables you to build, deploy, and manage containerized applications at scale.
Scenarios:
  • Building, deploying, and scaling modern cloud-native applications, as it provides a flexible and scalable platform for running containerized applications.
  • Providing a platform for DevOps and CI/CD pipelines, as it integrates with a variety of tools and services for source control, build and deployment automation, and testing.
  • Building microservices architectures, as it allows you to break down monolithic applications into smaller, more manageable services that can be deployed and scaled independently.
Use with:
  • Azure Kubernetes Service (AKS): A managed Kubernetes service that makes it easy to deploy, manage, and scale containerized applications using Kubernetes.
  • Azure Service Fabric: A distributed systems platform that can be used to build and deploy highly scalable, reliable, and resilient cloud applications.
  • Azure DevOps: A set of services for software development and collaboration that can be used to manage the end-to-end application lifecycle, from development to deployment and operations.
Not ideal:
  • Applications that require low-level access to the underlying infrastructure, as Azure Container Apps provides a fully managed platform with limited control over the underlying infrastructure.
  • Applications that require real-time processing and low latency, as the multi-tenant nature of Azure Container Apps may result in variability in response times.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Container Apps.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Container Apps to another region.
Availability:
Azure Container Apps is designed for high availability, with automatic failover and load balancing to ensure that your applications are always available.
Scalability:
Azure Container Apps is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Container Apps, and receive alerts and notifications in case of issues.
Azure Container Instances
Azure Container Instances
A service in Azure that enables you to run containers in the cloud without having to manage any infrastructure.
Scenarios:
  • Running short-lived or infrequently used applications and tasks, as Azure Container Instances provides a fast and efficient way to run containers without having to manage any infrastructure.
  • Testing and debugging container applications, as Azure Container Instances makes it easy to quickly run containers for testing and debugging purposes.
  • Deploying small scale, stateless applications and services, as Azure Container Instances provides a simple and scalable platform for running containerized applications.
Use with:
  • Azure Functions: A serverless computing platform that can be used to build and run event-driven applications and services.
  • Azure Kubernetes Service (AKS): A managed Kubernetes service that makes it easy to deploy, manage, and scale containerized applications using Kubernetes.
  • Azure DevOps: A set of services for software development and collaboration that can be used to manage the end-to-end application lifecycle, from development to deployment and operations.
Not ideal:
  • Long-running applications and services, as Azure Container Instances is designed for short-lived or infrequently used applications and tasks.
  • Applications that require persistent storage, as Azure Container Instances does not provide any built-in storage solution.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Container Instances.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Container Instances to another region.
Availability:
Azure Container Instances is designed for high availability, with automatic failover and load balancing to ensure that your containers are always available.
Scalability:
Azure Container Instances is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Container Instances, and receive alerts and notifications in case of issues.
Azure Functions
Azure Functions
A serverless computing platform.
Scenarios:
  • Event-driven applications that require processing of events, such as creating thumbnails from uploaded images, sending notifications, or analyzing logs.
  • Building microservices and serverless architectures, where you can run small pieces of code that perform a single function.
  • Applications that require rapid scaling and automatic provisioning of resources, as Azure Functions can automatically scale based on incoming request rate.
Use with:
  • Azure Event Grid for event-driven architectures, enabling Azure Functions to trigger in response to events from other Azure services.
  • Azure Cosmos DB for storing and processing data, enabling Azure Functions to retrieve and store data in Cosmos DB.
  • Azure Service Bus for messaging and queue processing, enabling Azure Functions to process messages and queues.
Not ideal:
  • Applications that require long-running or persistent processes, as Azure Functions are designed for stateless and ephemeral processing.
  • Applications that require high-performance, low-latency access to data, as Azure Functions can have higher latency compared to other Azure services.
Backup:
Azure Functions provide built-in disaster recovery and data replication across multiple regions for high availability, however, for backup and restore purposes, you can use Azure Backup to protect your Azure Functions by backing up its configuration and data to a recovery vault.
Availability:
Azure Functions provide high availability by automatically replicating your functions across multiple regions and automatically provisioning additional resources to meet demand.
Scalability:
Azure Functions automatically scale based on incoming request rate, enabling you to scale up or down dynamically based on the needs of your application. You can also set up auto-scale rules based on custom metrics.
Monitoring:
Azure Functions provides built-in monitoring capabilities, including logging and telemetry data, and provides integration with Azure Monitor to track performance and view logs and metrics. You can also use Azure Log Analytics and Azure Monitor to track and visualize your Azure Functions usage and performance and set up alerts to notify you of issues.
Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS)
A fully managed Kubernetes service that makes it easy to deploy and manage containerized applications in the cloud.
Scenarios:
  • Containerized applications: AKS is ideal for deploying and managing containerized applications, especially those that are built using microservices architecture.
  • DevOps workflows: AKS supports DevOps workflows by providing an integrated and fully managed platform for deploying, updating, and scaling containerized applications.
Use with:
  • Azure Container Registry: A fully managed container registry that can be used to store and manage container images for deployment on AKS.
  • Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of containerized applications deployed on AKS, and receive alerts and notifications in case of issues.
Not ideal:
  • Applications that are not containerized, as AKS is designed specifically for deploying and managing containerized applications.
  • Applications that require a high degree of customization and control, as AKS is a fully managed service and does not provide direct access to the underlying infrastructure.
Backup:
Azure Backup: A fully managed backup service that can be used to protect data and configuration for applications deployed on AKS.
Availability:
AKS is designed for high availability, and provides automatic failover and load balancing to ensure that your applications are always available.
Scalability:
AKS is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of AKS, and receive alerts and notifications in case of issues.
Azure Logic Apps
Azure Logic Apps
A cloud-based platform for building, deploying, and running workflows that integrate with various services and systems.
Scenarios:
  • Automating business processes and workflows, as Azure Logic Apps provides a visual and intuitive interface for building and deploying workflows that integrate with various services and systems.
  • Integrating cloud-based and on-premises systems, as Azure Logic Apps supports a wide range of data sources and protocols for connecting to various services and systems.
  • Building microservices and serverless architectures, as Azure Logic Apps provides a scalable and flexible platform for building and deploying workflows that can be triggered by events and run in response to messages.
Use with:
  • Azure Functions: A serverless computing platform that can be used to build and run event-driven applications and services.
  • Azure API Management: A fully managed API management platform that can be used to publish, manage, and monitor APIs and microservices.
  • Azure Event Grid: A fully managed event routing service that can be used to route events to various services and systems, including Azure Logic Apps.
Not ideal:
  • High-performance computing or data-intensive workloads, as Azure Logic Apps is designed for workflows and integrations, not for heavy-duty computing tasks.
  • Applications that require fine-grained control over the underlying infrastructure, as Azure Logic Apps provides a managed platform for building and deploying workflows, and does not provide direct access to the underlying infrastructure.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Logic Apps.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Logic Apps to another region.
Availability:
Azure Logic Apps is designed for high availability, with automatic failover and load balancing to ensure that your workflows are always available.
Scalability:
Azure Logic Apps is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Logic Apps, and receive alerts and notifications in case of issues.
Azure Virtual Machines
Azure Virtual Machines
A service that allows you to create and manage virtualized computing environments in the cloud.
Scenarios:
Azure VMs are best used for scenarios that require a flexible and scalable computing environment. They can be used to run a wide range of applications, including web applications, databases, and development environments. Azure VMs are also useful for migrating existing applications to the cloud, as well as for testing and development purposes.
Use with:
Azure VMs can be used in combination with many other Azure services, including Azure Storage, Azure Load Balancer, and Azure Networking, to create a complete and highly available computing environment in the cloud.
Not ideal:
Azure VMs may not be appropriate for scenarios that require extremely low latency or high-performance computing, as the performance of virtual machines can be affected by resource contention with other virtual machines on the same host.
Backup:
Azure VMs can be backed up using Azure Backup, a cloud-based backup service that provides data protection and recovery capabilities for virtual machines. You can use Azure Backup to create and manage backup schedules, and perform restore operations in the event of data loss.
Availability:
Azure VMs provide high availability and resiliency through features such as availability sets, which ensure that virtual machines are placed on separate physical hosts to protect against hardware failures. Additionally, you can use Azure Site Recovery to implement disaster recovery and business continuity plans for virtual machines.
Scalability:
Azure VMs can be easily scaled up or down as needed to meet changing demands. You can increase or decrease the number of virtual machines in your environment, as well as adjust the size and configuration of individual virtual machines to meet your needs.
Monitoring:
Azure VMs can be monitored using Azure Monitor, a cloud-based monitoring service that provides visibility into the performance and health of virtual machines. You can use Azure Monitor to track performance metrics, set up alerts and notifications, and visualize log data for virtual machines.
Azure Web Apps
Azure Web Apps
A fully managed platform for building, deploying, and scaling web applications.
Scenarios:
  • Building and deploying modern web applications, including web apps, RESTful APIs, and mobile backends.
  • Hosting websites and web applications, as it provides a scalable and cost-effective platform for delivering content over the internet.
  • Providing a platform for development and testing, as it provides an easy-to-use environment for building, deploying, and testing web applications.
Use with:
  • Azure SQL Database: A fully managed relational database service that can be used as a backend for web applications hosted on Azure Web App.
  • Azure Functions: A serverless compute service that can be used to build and run event-driven applications and microservices.
  • Azure Cache for Redis: A fully managed in-memory data store that can be used as a cache for web applications hosted on Azure Web App.
Not ideal:
  • Applications that require low-level access to the underlying infrastructure, as Azure Web App provides a fully managed platform with limited control over the underlying infrastructure.
  • Applications that require real-time processing and low latency, as Azure Web App provides a multi-tenant platform that may result in variability in response times.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data and configuration for Azure Web App.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data and configuration for Azure Web App to another region.
Availability:
Azure Web App is designed for high availability, with automatic failover and load balancing to ensure that your applications are always available.
Scalability:
Azure Web App is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Web App, and receive alerts and notifications in case of issues.

Data Integration and Management Services

Azure Data Factory
Azure Data Factory
A fully managed, cloud-based data integration service that allows you to create, schedule, and orchestrate data pipelines that can move and transform data from various sources to various destinations, including SQL databases.
Scenarios:
It's best used for ETL (Extract, Transform and Load) scenarios, and scenarios where you need to move and transform data between various sources and destinations.
Use with:
Not ideal:
It's not the best option for scenarios where you don't need to move or transform data between various sources and destinations.
Backup:
Azure Data Factory itself can be used as a backup solution for other services like SQL DB, Synapse and Cosmos DB; it allows you to create data pipelines that can move data from your source to different destinations.
Availability:
  • Azure Data Factory provides built-in high availability and disaster recovery options, including automatic failover to a secondary replica and point-in-time restore.
Scalability:
  • Scale out your data pipelines by adding more resources like data integration runtime to distribute data processing across multiple servers
  • Scale out your data pipelines by adding more regions to distribute data across multiple servers
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure Data Factory.
  • Azure Monitor can be used to monitor Azure Data Factory performance and troubleshoot issues.
  • Built-in monitoring capabilities such as pipeline run and activity run history, monitoring & alerting, and Data Factory Analytics that enables you to track performance, troubleshoot issues, and identify performance bottlenecks.

Databases Services

Azure Arc-enabled SQL Server
Azure Arc-enabled SQL Server
A service that allows you to manage SQL Server instances running on-premises or in other clouds with Azure Arc.
Scenarios:
It's best used for organizations that have multiple SQL Server instances running in different environments and need a consistent way to manage and monitor them.
Use with:
Not ideal:
It's not suitable for scenarios where you don't have any on-premises or multi-cloud SQL Server instances to manage.
Backup:
Azure Backup is the appropriate backup solution for Azure Arc-enabled SQL Server.
Availability:
  • Built-in high availability with automatic failover to a secondary replica, it can be either on-premises or in another cloud, depending on the configuration.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Server instances running on-premises or in other clouds.
  • Scale out your SQL Server instances using Azure Arc to distribute data processing across multiple servers.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Managed Instance.
  • Azure Monitor for SQL to monitor performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Automatic tuning, Query store, and Azure SQL Analytics.
Azure SQL Database
Azure SQL
A fully managed relational database service that supports SQL Server-compatible Transact-SQL.
Scenarios:
Best used for traditional relational database scenarios, such as online transaction processing (OLTP) and line-of-business (LOB) applications, as well as for small to medium-sized data warehouses.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance, real-time analytics and very large datasets.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Database.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level with a few clicks or automatically with the use of Azure Automation.
  • Scale out using read replicas to distribute read load across multiple servers.
  • Scale out using Azure Elastic Database Pools to share resources among multiple databases.
Monitoring:
Azure SQL Edge
Azure SQL Edge
A small-footprint version of SQL Server optimized for IoT scenarios.
Scenarios:
It's best used for Internet of Things (IoT) and edge computing scenarios, where devices have limited resources and require a lightweight, low-power database.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance or high-transactional workloads.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Edge.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Edge instances.
Monitoring:
Azure SQL Managed Instance
Azure SQL Managed Instance
A fully managed SQL Server instance that provides an almost lift-and-shift experience of moving on-premises SQL Server databases to the cloud.
Scenarios:
It's best used for applications that are currently running on an on-premises SQL Server and need to be moved to the cloud with minimal changes.
Use with:
Not ideal:
It's not the best option if you're looking for a fully managed service with a high level of automation and scalability.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Managed Instance.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level with a few clicks or automatically with the use of Azure Automation.
  • Scale out using read replicas to distribute read load across multiple servers.
  • Scale out using Azure Elastic Database Pools to share resources among multiple databases.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Managed Instance.
  • Azure Monitor for SQL to monitor performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Automatic tuning, Query store, and Azure SQL Analytics.
Azure SQL Server Big Data Clusters
Azure SQL Server Big Data Clusters
A fully-managed service that allows you to run SQL Server, Spark, and HDFS all together on Kubernetes.
Scenarios:
It's best used for big data scenarios and SQL Server scenarios that require integration with Apache Spark and Hadoop ecosystem.
Use with:
Not ideal:
It's not the best option for scenarios that don't require Spark integration.
Backup:
Azure Data Factory is an appropriate backup solution for Azure SQL Server Big Data Clusters. Azure Data Factory allows you to create data pipelines that can move data from Azure SQL Server Big Data Clusters to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups.
Availability:
  • Built-in high availability and disaster recovery options, including automatic failover to a secondary replica and point-in-time restore.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale out your SQL Server Big Data Clusters by adding more nodes to distribute data processing across multiple servers
Monitoring:
Azure SQL Server on Virtual Machines
Azure SQL Server on Virtual Machines
Allows you to run SQL Server on Azure virtual machines, giving you the flexibility to choose your operating system, storage, and networking options.
Scenarios:
It's best used for scenarios where you need full control over the SQL Server environment and have specific requirements that are not met by other Azure SQL services.
Use with:
Not ideal:
It's not the best option for scenarios where you don't need full control over the SQL Server environment or when you have requirements that are not met by other Azure SQL services.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Server on Virtual Machines.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Server on Virtual Machines by adjusting the size of the virtual machine.
  • Scale out your SQL Server on Virtual Machines by adding more virtual machines to distribute data processing across multiple servers.
Monitoring:
  • Azure Log Analytics is a good solution to use with Azure SQL Database.
  • Azure Monitor for VMs to monitor the performance of your virtual machines and the underlying infrastructure.
  • SQL Server Management Studio (SSMS) and SQL Server Profiler to monitor and troubleshoot performance issues for SQL Server on Virtual Machines.
Azure Synapse Analytics (formerly SQL Data Warehouse)
Azure Synapse Analytics (formerly SQL Data Warehouse)
A fully managed, cloud-based analytics service that supports big data scenarios.
Scenarios:
Best used for large-scale data warehousing and business intelligence (BI) workloads, as well as for data integration and data analytics.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance, real-time analytics and very large datasets.
Backup:
Azure Data Factory is an appropriate backup solution for Azure Synapse Analytics. Azure Data Factory allows you to create data pipelines that can move data from Azure Synapse Analytics to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your data warehouse with a few clicks or automatically with the use of Azure Automation.
  • Scale out your data warehouse using Azure Data Factory to distribute data processing across multiple servers.
  • Scale out your data warehouse using Azure Data Lake Storage to store large amounts of data.
Monitoring:
Azure Log Analytics is a great solution for monitoring Azure Synapse Analytics.

Key Management Services

Azure Key Vault
Azure Key Vault
A secure and scalable cloud-based solution for managing and storing secrets, such as certificates, keys, and passwords.
Scenarios:
Best used for securely storing, managing, and accessing secrets, such as certificates, keys, and passwords, used by cloud applications and services.
Use with:
Everything, when you want secure any kind of secret, password, etc!
Not ideal:
Not applicable - if used for what was created for, it can work with any Azure (or not) Service.
Backup:
Backup and recovery of secrets stored in Azure Key Vault can be achieved by exporting the secrets to a file and then storing the file in a secure location. You can also periodically create snapshots of your Key Vault to use as a backup in case of disaster or data loss.
Availability:
Azure Key Vault provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Key Vault scales to meet the changing needs of your organization, allowing you to store an unlimited number of secrets.
Monitoring:
Azure Key Vault provides monitoring and logging capabilities, including activity logs and diagnostic logs, to help you monitor and troubleshoot the usage and availability of your secrets.

Messaging Services

Azure Event Grid
Azure Event Grid
A fully managed event routing service that enables developers to build event-driven applications.
Scenarios:
  • Event-driven architectures: Event Grid enables you to build event-driven architectures and react to changes in your applications and services in near real-time.
  • Serverless computing: Event Grid can be used to trigger serverless computing resources like Azure Functions or Azure Logic Apps.
  • IoT devices: Event Grid can be used to receive and process telemetry from IoT devices.
  • Event-based applications: Event Grid can be used for event-based applications that need to react to changes in the system.
Use with:
  • Azure Functions: Azure Functions can be triggered by events emitted to Event Grid.
  • Azure Logic Apps: Azure Logic Apps can be used to build workflows that are triggered by events emitted to Event Grid.
  • Azure Service Bus: Azure Service Bus can be used as an intermediary between Event Grid and other services that do not have direct integration.
Not ideal:
High-volume and high-velocity data processing as Event Grid is not optimized for this use case.
Backup:
Use Azure Event Hubs or other data ingestion services as a backup destination for events that are published to Event Grid.
Availability:
Azure Event Grid is highly available as it is a globally distributed service with built-in redundancy.
Scalability:
Scalability possibilities for Azure Event Grid include scaling up and down the number of events processed per second and adding or removing event domains as required.
Monitoring:
Monitoring for Azure Event Grid can be performed through Azure Monitor, which provides insights into the health and performance of the service, as well as diagnostics and logging.
Azure Event Hubs
Azure Event Hubs
A fully managed, real-time data ingestion service for big data streaming and event-processing.
Scenarios:
  • Event Hub is ideal for event and telemetry ingestion, such as IoT (Internet of Things) telemetry, log data, and social media data.
  • It's a great option for large-scale, real-time data processing, such as real-time analytics, event-driven applications, and batch data processing.
Use with:
  • Event Hub works well in combination with other Azure services such as Azure Stream Analytics for real-time data analysis, Azure Functions for serverless event-driven processing, and Azure Notification Hubs for push notifications.
  • It can also be used as a source of data for Azure Databricks, Power BI, and Apache Spark for data warehousing and analytics purposes.
Not ideal:
  • Event Hub is not meant to be used as a transactional database or a long-term data storage solution.
  • It's not recommended to use Event Hub for scenarios where low latency or high throughput is not important.
Backup:
  • Event Hub provides built-in data retention and capture policies that enable you to backup your data.
  • The backup data can be saved to Azure Blob Storage, Azure Data Lake Storage, or other Azure Event Hubs instances for further analysis.
Availability:
  • Event Hub is highly available, with automatic redundancy built into the service.
  • It provides multiple levels of data redundancy, ensuring that your data is safe and available even in the event of hardware failures.
Scalability:
  • Event Hub is designed to scale horizontally and vertically, allowing you to easily handle increases in data volume.
  • It provides features such as partitioning and load balancing, allowing you to handle high-throughput scenarios.
Monitoring:
  • Azure Monitor provides built-in monitoring and logging capabilities for Event Hub, allowing you to track events and troubleshoot issues.
  • It also provides real-time insights into the health, performance, and usage of the service.
Azure Service Bus
Azure Service Bus
A messaging service that enables you to send and receive messages between different systems in a reliable and secure way.
Scenarios:
Best used for scenarios that require reliable messaging and decoupling of systems. It can be used to implement a message-based communication architecture, where different systems can send and receive messages in a loosely coupled way. It can also be used to implement a publish-subscribe pattern, where messages can be sent to multiple subscribers at once.
Use with:
Can be used in combination with Azure Functions, Azure WebJobs, and Azure Logic Apps to process messages in a decoupled way. It can also be used in combination with Azure Event Grid to route messages to different systems based on their content.
Not ideal:
May not be appropriate for scenarios that require extremely high throughput and low latency, such as high-frequency trading systems.
Backup:
Supports automatic data backup and disaster recovery. You can configure automatic backup for your service bus namespace and configure data replication for high availability.
Availability:
It's a globally available service, meaning that it can be accessed from anywhere in the world. Additionally, it provides built-in high availability and automatic failover, which can help ensure that messages are delivered even in case of failures.
Scalability:
It's a highly scalable service that can handle millions of messages per second. You can scale the number of messaging entities, throughput units, and message size according to your needs.
Monitoring:
Azure Service Bus provides several built-in monitoring and logging features that can help you understand how the service is being used and troubleshoot any issues that may arise. You can use Azure Monitor to collect and analyze data from Azure Service Bus, as well as to set up alerts and notifications. Additionally, you can use Azure Log Analytics to collect and analyze log data from Azure Service Bus.

Monitoring Services

Azure Log Analytics
Azure Log Analytics
Provides log collection, search, analysis, and alerting capabilities for your applications and infrastructure.
Scenarios:
Azure Log Analytics is best used for scenarios that require log data analysis and troubleshooting. It can be used to collect and analyze log data from various sources, including Azure services, on-premises systems, and third-party services. With its powerful search capabilities, you can quickly find the information you need to troubleshoot issues and resolve problems.
Use with:
Azure Log Analytics can be used in combination with many other Azure services, including Azure Monitor, Azure Security Center, and Azure Automation, to provide a comprehensive view of your environment and help you monitor and manage your resources.
Not ideal:
Azure Log Analytics may not be appropriate for scenarios that require real-time analysis of log data. The data collection, search, and analysis features of the service are optimized for historical data analysis and troubleshooting.
Backup:
Azure Log Analytics does not require a separate backup solution, as it stores data in a highly durable manner within Azure. The data is stored in multiple locations to protect against failures and data loss. Additionally, you can use the export data feature to export your log data to other storage solutions for backup purposes.
Availability:
Azure Log Analytics is a globally available service that provides built-in redundancy and high availability.
Scalability:
Azure Log Analytics is a highly scalable service that can handle millions of log events per day. You can scale the service to meet your needs by adjusting the number of queries, data ingestion rate, and data retention period.
Monitoring:
Azure Log Analytics provides a wealth of monitoring and alerting features that can help you monitor and manage your environment. You can use the service to set up alerts and notifications based on specific log data patterns, and use the Azure Monitor integration to visualize and analyze log data in real-time. Additionally, you can use the Azure Log Analytics REST API to programmatically access and manage your log data.
Azure Monitor
Azure Monitor
A comprehensive platform for monitoring, managing, and diagnosing applications, infrastructure, and network performance.
Scenarios:
Best used for monitoring the performance, health, and availability of Azure resources, applications, and services. It provides insights into resource utilization, network traffic, and logs.
Use with:
Azure Monitor integrates well with other Azure services, such as Azure Resource Manager, Azure Storage, and Azure Functions, for comprehensive monitoring and management.
Not ideal:
Not applicable - Azure Monitor is an umbrella of services that cover all your needs (e.g. Azure Monitor for SQL)
Availability:
Azure Monitor provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Monitor scales to meet the changing needs of your organization, allowing you to monitor an unlimited number of resources, applications, and services.

Storage Services

Azure API Management
Azure API Management
A fully managed service for publishing, securing, and managing APIs (Application Programming Interfaces).
Scenarios:
  • Exposing internal APIs to external consumers securely.
  • Creating a portal for external developers to interact with APIs.
  • Implementing rate limiting, security, and logging for APIs.
Use with:
Not ideal:
  • High-performance processing.
  • Applications with strict low latency requirements.
Backup:
Azure API Management has built-in disaster recovery mechanisms and Azure Backup can also be used to backup and restore data.
Availability:
Azure API Management provides high availability through multiple instances running in an active-active configuration.
Scalability:
Azure API Management can be easily scaled up and down as per the requirement.
Monitoring:
Azure Monitor can be used for monitoring the performance and availability of APIs. Azure API Management also provides built-in analytics and monitoring capabilities.
Azure Application Gateway
Azure Application Gateway
A regional layer 7 load balancer that enables you to manage traffic to your web applications.
Scenarios:
  • Load balancing incoming web traffic to multiple back-end servers
  • SSL offloading, reducing the load on your back-end servers and improving performance
  • URL-based routing and path-based routing to direct traffic to specific back-end servers
Use with:
Not ideal:
  • Storing and processing large amounts of data
  • Applications that require complex data processing and computation
Backup:
Azure Backup can be used to back up configuration and data stored in an Azure Application Gateway.
Availability:
  • Azure Application Gateway provides high availability by distributing incoming traffic across multiple instances.
  • The service is highly available in multiple Azure regions and provides automatic failover in the event of an instance failure.
Scalability:
  • Azure Application Gateway can scale up and down based on incoming traffic, with auto-scaling capabilities to handle spikes in demand.
Monitoring:
Azure Monitor provides various monitoring options for the Azure Application Gateway, including performance and usage metrics, activity logs, and alerts.
Azure Traffic Manager
Azure Traffic Manager
A layer-4 global traffic load balancer that enables you to distribute incoming traffic to multiple endpoints based on configurable rules.
Scenarios:
  • Layer 4 load balancing
  • Routing traffic to multiple regions for high availability and performance
  • Routing traffic to multiple cloud service or web apps
  • Redirecting traffic to a new version of a service during a deployment
Use with:
Azure Traffic Manager integrates well with various Azure services, including Azure Web Apps, Azure Virtual Machines, Azure API Management, and Azure Functions, allowing you to distribute incoming traffic to multiple endpoints for high availability and performance.
Not ideal:
Applications that require session persistence as DNS Traffic Manager operates at the domain name level and does not support session persistence.
Backup:
Azure DNS Traffic Manager is a highly available service with built-in redundancy and failover capabilities, so a specific backup solution is not required.
Availability:
Azure DNS Traffic Manager provides global availability with a 99.9% SLA.
Scalability:
Azure DNS Traffic Manager can handle millions of queries per minute and is automatically scalable.
Monitoring:
Azure DNS Traffic Manager provides monitoring and diagnostic information through Azure Monitor and Azure Log Analytics.
Azure Front Door
Azure Front Door
Layer 7 global load balancing across multiple regions to ensure optimal performance for end-users.
Scenarios:
  • Layer 7 global load balancing
  • Best suited for scenarios that require high-scale, globally distributed and highly available applications. It can be used for scenarios such as load balancing, content delivery, and performance optimization.
  • WAF: Front Door includes a Web Application Firewall (WAF) that provides protection against common web-based attacks such as SQL injection and cross-site scripting.
  • SSL/TLS Termination: Front Door supports SSL/TLS termination, allowing you to securely encrypt traffic between users and your backends.
  • Performance Optimization: Front Door optimizes end-to-end performance by using caching, compression, and health checks to ensure that your applications are highly available and fast for users.
Use with:
Azure Front Door can be used in conjunction with Azure CDN, Azure Load Balancer, and Azure Application Gateway for further optimizations and benefits.
Not ideal:
Azure Front Door should not be used as a sole solution for application security.
Backup:
Azure Front Door does not require a specific backup solution as it has built-in high availability and disaster recovery mechanisms.
Availability:
Azure Front Door provides high availability with multiple points of presence (PoPs) and active-active architectures.
Scalability:
Azure Front Door is highly scalable, providing automatic scaling to meet the demands of your application.
Monitoring:
Azure Front Door provides detailed performance metrics and logging capabilities through Azure Monitor, allowing you to monitor and troubleshoot performance issues.
Azure Load Balancer
Azure Load Balancer
A Layer 4 regional load balancer.
Scenarios:
Azure Load Balancer is best suited for distributing incoming traffic across multiple virtual machines or resources, providing high availability and scalability for applications. It can be used for load balancing incoming internet traffic to multiple virtual machines, as well as for internal load balancing for virtual machines in a virtual network.
Use with:
Azure Load Balancer works well in combination with Azure Virtual Machines, Azure Cloud Services, Azure Container Instances and Azure Web Apps.
Not ideal:
Azure Load Balancer is not intended for specific security scenarios such as network security or application-layer protection.
Backup:
Azure Load Balancer does not require a specific backup solution as it is a highly available service within Azure.
Availability:
Azure Load Balancer provides high availability through automatic failover to another instance in case of a failure, ensuring continuity of service.
Scalability:
Azure Load Balancer can automatically scale to accommodate increased traffic and resource needs, providing seamless scalability for applications.
Monitoring:
Azure Load Balancer provides monitoring and diagnostics through Azure Monitor, enabling the tracking of health and performance metrics for the load balancer and the resources it distributes traffic to.

Storage Services

Azure Blob Storage
Azure Blob Storage
A fully managed object storage service that enables you to store and retrieve large amounts of unstructured data, such as text and binary data, in its native format.
Scenarios:
  • Storing unstructured data, such as images, videos, audio, and documents, for distribution and retrieval over the internet.
  • Storing data for backup and disaster recovery, as it provides a durable and cost-effective storage solution.
  • Storing data for big data analytics, as it can be easily accessed and processed using Azure Data Factory and Azure HDInsight.
Use with:
  • Azure Functions, can be used to process data stored in Azure Blob Storage and take actions based on the data.
  • Azure Data Factory, a fully managed data integration service that can be used to transfer data from Azure Blob Storage to other Azure services for further processing and analysis.
  • Azure HDInsight, a fully-managed cloud service that makes it easy to process big data using popular open-source frameworks such as Apache Hadoop, Hive, and Spark.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Blob Storage is optimized for reliability and durability rather than speed.
  • Applications that require strong consistency guarantees, as Azure Blob Storage provides eventual consistency.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Blob Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Blob Storage to another region.
Availability:
Azure Blob Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Blob Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Blob Storage, and receive alerts and notifications in case of issues.
Azure Cosmos DB
Azure Cosmos DB
A fully managed, globally distributed, multi-model database service that supports document, key-value, graph, and column-family data models.
Scenarios:
It's best used for globally distributed, low-latency, and highly available web, mobile, gaming, IoT, and AI applications.
Use with:
Not ideal:
It's not the best option for scenarios that require a traditional relational database with advanced querying capabilities like joins and sub-queries.
Backup:
Azure Data Factory is an appropriate backup solution for Azure Cosmos DB. a href="#azure-data-factory">Azure Data Factory allows you to create data pipelines that can move data from Azure Cosmos DB to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups
Availability:
  • Built-in high availability and global distribution, allowing you to replicate your data across multiple regions for low-latency access and high availability.
  • Built-in disaster recovery options, including point-in-time restore and configurable consistency levels for different use cases.
Scalability:
  • Scale up or down the performance level of your database with a few clicks or automatically with the use of Azure Automation.
  • Scale out your database by adding more regions or Azure Virtual Network to distribute data across multiple servers.
  • Scale out your database by partitioning your data to distribute data across multiple servers.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Edge.
  • Azure Monitor can be used to monitor Azure Data Factory performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Metrics, Alerts, and Diagnostic logs that enables you to track performance, troubleshoot issues, and identify performance bottlenecks.
Azure Data Lake Storage
Azure Data Lake Storage
A highly scalable and secure data lake that enables you to store large amounts of data, including structured and unstructured data, in its native format.
Scenarios:
  • Storing and processing large amounts of structured and unstructured data for big data analytics.
  • Storing data for machine learning and artificial intelligence applications.
  • Storing and processing log and telemetry data.
  • Storing and processing data for business intelligence and reporting.
Use with:
  • Azure Databricks, a fast, easy, and collaborative Apache Spark-based analytics platform that can be used to process data stored in Azure Data Lake Storage.
  • Azure HDInsight, a fully-managed cloud service that makes it easy to process big data using popular open-source frameworks such as Apache Hadoop, Hive, and Spark.
  • Azure Stream Analytics, can be used to stream data into Azure Data Lake Storage for real-time analytics and reporting.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Data Lake Storage is optimized for large scale batch processing.
  • Applications that require strong consistency guarantees, as Azure Data Lake Storage provides eventual consistency.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data stored in Azure Data Lake Storage.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data stored in Azure Data Lake Storage to another region.
Availability:
Azure Data Lake Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Data Lake Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Data Lake Storage, and receive alerts and notifications in case of issues.
Azure Queue Storage
Azure Queue Storage
A fully managed message queue that enables you to store and retrieve large numbers of messages, so you can send and receive messages between independent systems.
Scenarios:
  • Reliable communication between applications and microservices, especially when the communication involves multiple steps and can be performed asynchronously.
  • Processing batch jobs by breaking them into smaller tasks that can be processed by multiple worker roles in parallel.
  • Storing messages for later processing, such as emails or push notifications.
Use with:
  • Azure Functions, can be used to process messages stored in Azure Queue Storage and take actions based on the messages.
  • Azure Service Bus, can be used to provide reliable and secure messaging between applications and services.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Queue Storage is optimized for reliability and durability rather than speed.
  • Applications that require strong consistency guarantees, as Azure Queue Storage provides eventual consistency.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Queue Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Queue Storage to another region.
Availability:
Azure Queue Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Queue Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Queue Storage, and receive alerts and notifications in case of issues.
Azure Table Storage
Azure Table Storage
A scalable, low-cost NoSQL key-value store that can be used to store and query large amounts of unstructured data.
Scenarios:
  • Storing large amounts of structured data for applications such as analytics, reporting, or auditing.
  • Storing metadata or reference data for applications.
  • Storing data that does not need complex transactions or relationships, but still requires fast and efficient access.
Use with:
  • Azure Functions can be used to process data stored in Azure Table Storage and take actions based on the data.
  • Azure Stream Analytics can be used to stream data from IoT devices into Azure Table Storage for real-time analytics and reporting.
  • Azure Data Factory can be used to extract, transform, and load data into Azure Table Storage for reporting and analytics.
Not ideal:
  • Applications that require complex transactions or relationships between data entities.
  • Applications that require a relational data model.
  • Applications that require strong consistency guarantees.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Table Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Table Storage to another region.
Availability:
Azure Table Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Table Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Table Storage, and receive alerts and notifications in case of issues.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +A Guide to Common Azure Services

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

A Guide to Common Azure Services

by George Kosmidis / Published 2 years ago

Introduction

In this article, we'll do a short overview of some of the most widely used Azure Services. In a bullet format, you'll quickly learn about their ideal use cases, which services complement them best, and where to avoid using them. Additionally, we'll note on important aspects such as backups, scalability, availability, and monitoring to help you make informed decisions when using these services. This article will be updated in the long run with new services, as demand and time allows.

Azure Services ToC alphabetically sorted

Azure Services

Backup and Recovery Services

Azure Backup
Azure Backup
A cloud-based backup and disaster recovery service.
Scenarios:
Best used for backing up and restoring critical business data, such as servers, virtual machines, and databases, from on-premises or in the cloud.
Use with:
Azure Backup integrates well with other Azure services like Azure Site Recovery for disaster recovery, Azure Storage for cost-effective data storage, and Azure Monitor for monitoring and alerts.
Not ideal:
Azure Backup is not suitable for real-time or continuous data backup or replication, use Azure Site Recovery instead.
Availability:
Azure Backup provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Backup scales to meet the changing needs of your organization, allowing you to store unlimited data in the cloud.
Monitoring:
Azure Backup provides a comprehensive set of monitoring and reporting capabilities, including real-time monitoring and alerts, backup reports, and detailed logs, to help you manage and troubleshoot your backup and restore operations.
Azure Site Recovery
Azure Site Recovery
A disaster recovery solution that helps organizations protect their critical applications and data from downtime and data loss in case of a disaster or a disruption.
Scenarios:
  • Disaster recovery: Azure Site Recovery provides a fully managed disaster recovery solution that helps organizations ensure the availability and resiliency of their critical applications and data.
  • Migration: Azure Site Recovery can be used to migrate applications and data to Azure, either as part of a disaster recovery plan or as a standalone migration solution.
Use with:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for applications and workloads that are protected by Azure Site Recovery.
  • Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of applications and workloads that are protected by Azure Site Recovery, and receive alerts and notifications in case of issues.
Not ideal:
Applications and workloads that are not critical, as Azure Site Recovery is designed for protecting critical applications and data, and may not be suitable for non-critical workloads.
Backup:
Not applicable.
Availability:
Azure Site Recovery is designed for high availability, and provides automatic failover and load balancing to ensure that your applications and data are always available.
Scalability:
Azure Site Recovery is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Site Recovery, and receive alerts and notifications in case of issues.

Cache Services

Azure Redis Cache
Azure Redis Cache
An in-memory data store that can be used as a cache or a data store and supports various data structures such as strings, hashes, and lists
Scenarios:
  • High-performance caching of frequently used data to speed up application response times.
  • Session management for web applications.
  • Real-time message notifications and broadcasting for online games or chat applications.
  • Storing and processing real-time analytics and sensor data from IoT devices.
Use with:
  • Azure Functions, can be used to process data stored in Azure Redis Cache and take actions based on the data.
  • Azure Stream Analytics, can be used to stream data from IoT devices into Azure Redis Cache for real-time analytics and reporting.
  • Azure Web Apps, can be used to host web applications that use Azure Redis Cache for session management and data caching.
Not ideal:
  • Applications that require strong consistency guarantees, as Redis Cache provides eventually consistent data.
  • Applications that require data persistence, as Redis Cache is an in-memory data store.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Redis Cache.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Redis Cache to another region.
Availability:
Azure Redis Cache is designed for high availability, with data automatically distributed across multiple cache nodes to ensure reliability and durability.
Scalability:
Azure Redis Cache is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Redis Cache, and receive alerts and notifications in case of issues.

Compute Services

Azure Container Apps
Azure Container Apps
A set of services in Azure that enables you to build, deploy, and manage containerized applications at scale.
Scenarios:
  • Building, deploying, and scaling modern cloud-native applications, as it provides a flexible and scalable platform for running containerized applications.
  • Providing a platform for DevOps and CI/CD pipelines, as it integrates with a variety of tools and services for source control, build and deployment automation, and testing.
  • Building microservices architectures, as it allows you to break down monolithic applications into smaller, more manageable services that can be deployed and scaled independently.
Use with:
  • Azure Kubernetes Service (AKS): A managed Kubernetes service that makes it easy to deploy, manage, and scale containerized applications using Kubernetes.
  • Azure Service Fabric: A distributed systems platform that can be used to build and deploy highly scalable, reliable, and resilient cloud applications.
  • Azure DevOps: A set of services for software development and collaboration that can be used to manage the end-to-end application lifecycle, from development to deployment and operations.
Not ideal:
  • Applications that require low-level access to the underlying infrastructure, as Azure Container Apps provides a fully managed platform with limited control over the underlying infrastructure.
  • Applications that require real-time processing and low latency, as the multi-tenant nature of Azure Container Apps may result in variability in response times.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Container Apps.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Container Apps to another region.
Availability:
Azure Container Apps is designed for high availability, with automatic failover and load balancing to ensure that your applications are always available.
Scalability:
Azure Container Apps is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Container Apps, and receive alerts and notifications in case of issues.
Azure Container Instances
Azure Container Instances
A service in Azure that enables you to run containers in the cloud without having to manage any infrastructure.
Scenarios:
  • Running short-lived or infrequently used applications and tasks, as Azure Container Instances provides a fast and efficient way to run containers without having to manage any infrastructure.
  • Testing and debugging container applications, as Azure Container Instances makes it easy to quickly run containers for testing and debugging purposes.
  • Deploying small scale, stateless applications and services, as Azure Container Instances provides a simple and scalable platform for running containerized applications.
Use with:
  • Azure Functions: A serverless computing platform that can be used to build and run event-driven applications and services.
  • Azure Kubernetes Service (AKS): A managed Kubernetes service that makes it easy to deploy, manage, and scale containerized applications using Kubernetes.
  • Azure DevOps: A set of services for software development and collaboration that can be used to manage the end-to-end application lifecycle, from development to deployment and operations.
Not ideal:
  • Long-running applications and services, as Azure Container Instances is designed for short-lived or infrequently used applications and tasks.
  • Applications that require persistent storage, as Azure Container Instances does not provide any built-in storage solution.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Container Instances.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Container Instances to another region.
Availability:
Azure Container Instances is designed for high availability, with automatic failover and load balancing to ensure that your containers are always available.
Scalability:
Azure Container Instances is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Container Instances, and receive alerts and notifications in case of issues.
Azure Functions
Azure Functions
A serverless computing platform.
Scenarios:
  • Event-driven applications that require processing of events, such as creating thumbnails from uploaded images, sending notifications, or analyzing logs.
  • Building microservices and serverless architectures, where you can run small pieces of code that perform a single function.
  • Applications that require rapid scaling and automatic provisioning of resources, as Azure Functions can automatically scale based on incoming request rate.
Use with:
  • Azure Event Grid for event-driven architectures, enabling Azure Functions to trigger in response to events from other Azure services.
  • Azure Cosmos DB for storing and processing data, enabling Azure Functions to retrieve and store data in Cosmos DB.
  • Azure Service Bus for messaging and queue processing, enabling Azure Functions to process messages and queues.
Not ideal:
  • Applications that require long-running or persistent processes, as Azure Functions are designed for stateless and ephemeral processing.
  • Applications that require high-performance, low-latency access to data, as Azure Functions can have higher latency compared to other Azure services.
Backup:
Azure Functions provide built-in disaster recovery and data replication across multiple regions for high availability, however, for backup and restore purposes, you can use Azure Backup to protect your Azure Functions by backing up its configuration and data to a recovery vault.
Availability:
Azure Functions provide high availability by automatically replicating your functions across multiple regions and automatically provisioning additional resources to meet demand.
Scalability:
Azure Functions automatically scale based on incoming request rate, enabling you to scale up or down dynamically based on the needs of your application. You can also set up auto-scale rules based on custom metrics.
Monitoring:
Azure Functions provides built-in monitoring capabilities, including logging and telemetry data, and provides integration with Azure Monitor to track performance and view logs and metrics. You can also use Azure Log Analytics and Azure Monitor to track and visualize your Azure Functions usage and performance and set up alerts to notify you of issues.
Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS)
A fully managed Kubernetes service that makes it easy to deploy and manage containerized applications in the cloud.
Scenarios:
  • Containerized applications: AKS is ideal for deploying and managing containerized applications, especially those that are built using microservices architecture.
  • DevOps workflows: AKS supports DevOps workflows by providing an integrated and fully managed platform for deploying, updating, and scaling containerized applications.
Use with:
  • Azure Container Registry: A fully managed container registry that can be used to store and manage container images for deployment on AKS.
  • Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of containerized applications deployed on AKS, and receive alerts and notifications in case of issues.
Not ideal:
  • Applications that are not containerized, as AKS is designed specifically for deploying and managing containerized applications.
  • Applications that require a high degree of customization and control, as AKS is a fully managed service and does not provide direct access to the underlying infrastructure.
Backup:
Azure Backup: A fully managed backup service that can be used to protect data and configuration for applications deployed on AKS.
Availability:
AKS is designed for high availability, and provides automatic failover and load balancing to ensure that your applications are always available.
Scalability:
AKS is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of AKS, and receive alerts and notifications in case of issues.
Azure Logic Apps
Azure Logic Apps
A cloud-based platform for building, deploying, and running workflows that integrate with various services and systems.
Scenarios:
  • Automating business processes and workflows, as Azure Logic Apps provides a visual and intuitive interface for building and deploying workflows that integrate with various services and systems.
  • Integrating cloud-based and on-premises systems, as Azure Logic Apps supports a wide range of data sources and protocols for connecting to various services and systems.
  • Building microservices and serverless architectures, as Azure Logic Apps provides a scalable and flexible platform for building and deploying workflows that can be triggered by events and run in response to messages.
Use with:
  • Azure Functions: A serverless computing platform that can be used to build and run event-driven applications and services.
  • Azure API Management: A fully managed API management platform that can be used to publish, manage, and monitor APIs and microservices.
  • Azure Event Grid: A fully managed event routing service that can be used to route events to various services and systems, including Azure Logic Apps.
Not ideal:
  • High-performance computing or data-intensive workloads, as Azure Logic Apps is designed for workflows and integrations, not for heavy-duty computing tasks.
  • Applications that require fine-grained control over the underlying infrastructure, as Azure Logic Apps provides a managed platform for building and deploying workflows, and does not provide direct access to the underlying infrastructure.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data and configuration for Azure Logic Apps.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data and configuration for Azure Logic Apps to another region.
Availability:
Azure Logic Apps is designed for high availability, with automatic failover and load balancing to ensure that your workflows are always available.
Scalability:
Azure Logic Apps is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor: A fully managed monitoring service that can be used to monitor the health and performance of Azure Logic Apps, and receive alerts and notifications in case of issues.
Azure Virtual Machines
Azure Virtual Machines
A service that allows you to create and manage virtualized computing environments in the cloud.
Scenarios:
Azure VMs are best used for scenarios that require a flexible and scalable computing environment. They can be used to run a wide range of applications, including web applications, databases, and development environments. Azure VMs are also useful for migrating existing applications to the cloud, as well as for testing and development purposes.
Use with:
Azure VMs can be used in combination with many other Azure services, including Azure Storage, Azure Load Balancer, and Azure Networking, to create a complete and highly available computing environment in the cloud.
Not ideal:
Azure VMs may not be appropriate for scenarios that require extremely low latency or high-performance computing, as the performance of virtual machines can be affected by resource contention with other virtual machines on the same host.
Backup:
Azure VMs can be backed up using Azure Backup, a cloud-based backup service that provides data protection and recovery capabilities for virtual machines. You can use Azure Backup to create and manage backup schedules, and perform restore operations in the event of data loss.
Availability:
Azure VMs provide high availability and resiliency through features such as availability sets, which ensure that virtual machines are placed on separate physical hosts to protect against hardware failures. Additionally, you can use Azure Site Recovery to implement disaster recovery and business continuity plans for virtual machines.
Scalability:
Azure VMs can be easily scaled up or down as needed to meet changing demands. You can increase or decrease the number of virtual machines in your environment, as well as adjust the size and configuration of individual virtual machines to meet your needs.
Monitoring:
Azure VMs can be monitored using Azure Monitor, a cloud-based monitoring service that provides visibility into the performance and health of virtual machines. You can use Azure Monitor to track performance metrics, set up alerts and notifications, and visualize log data for virtual machines.
Azure Web Apps
Azure Web Apps
A fully managed platform for building, deploying, and scaling web applications.
Scenarios:
  • Building and deploying modern web applications, including web apps, RESTful APIs, and mobile backends.
  • Hosting websites and web applications, as it provides a scalable and cost-effective platform for delivering content over the internet.
  • Providing a platform for development and testing, as it provides an easy-to-use environment for building, deploying, and testing web applications.
Use with:
  • Azure SQL Database: A fully managed relational database service that can be used as a backend for web applications hosted on Azure Web App.
  • Azure Functions: A serverless compute service that can be used to build and run event-driven applications and microservices.
  • Azure Cache for Redis: A fully managed in-memory data store that can be used as a cache for web applications hosted on Azure Web App.
Not ideal:
  • Applications that require low-level access to the underlying infrastructure, as Azure Web App provides a fully managed platform with limited control over the underlying infrastructure.
  • Applications that require real-time processing and low latency, as Azure Web App provides a multi-tenant platform that may result in variability in response times.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data and configuration for Azure Web App.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data and configuration for Azure Web App to another region.
Availability:
Azure Web App is designed for high availability, with automatic failover and load balancing to ensure that your applications are always available.
Scalability:
Azure Web App is highly scalable, and can be easily scaled up or down to meet the changing needs of your application, either manually or automatically based on pre-defined rules.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Web App, and receive alerts and notifications in case of issues.

Data Integration and Management Services

Azure Data Factory
Azure Data Factory
A fully managed, cloud-based data integration service that allows you to create, schedule, and orchestrate data pipelines that can move and transform data from various sources to various destinations, including SQL databases.
Scenarios:
It's best used for ETL (Extract, Transform and Load) scenarios, and scenarios where you need to move and transform data between various sources and destinations.
Use with:
Not ideal:
It's not the best option for scenarios where you don't need to move or transform data between various sources and destinations.
Backup:
Azure Data Factory itself can be used as a backup solution for other services like SQL DB, Synapse and Cosmos DB; it allows you to create data pipelines that can move data from your source to different destinations.
Availability:
  • Azure Data Factory provides built-in high availability and disaster recovery options, including automatic failover to a secondary replica and point-in-time restore.
Scalability:
  • Scale out your data pipelines by adding more resources like data integration runtime to distribute data processing across multiple servers
  • Scale out your data pipelines by adding more regions to distribute data across multiple servers
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure Data Factory.
  • Azure Monitor can be used to monitor Azure Data Factory performance and troubleshoot issues.
  • Built-in monitoring capabilities such as pipeline run and activity run history, monitoring & alerting, and Data Factory Analytics that enables you to track performance, troubleshoot issues, and identify performance bottlenecks.

Databases Services

Azure Arc-enabled SQL Server
Azure Arc-enabled SQL Server
A service that allows you to manage SQL Server instances running on-premises or in other clouds with Azure Arc.
Scenarios:
It's best used for organizations that have multiple SQL Server instances running in different environments and need a consistent way to manage and monitor them.
Use with:
Not ideal:
It's not suitable for scenarios where you don't have any on-premises or multi-cloud SQL Server instances to manage.
Backup:
Azure Backup is the appropriate backup solution for Azure Arc-enabled SQL Server.
Availability:
  • Built-in high availability with automatic failover to a secondary replica, it can be either on-premises or in another cloud, depending on the configuration.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Server instances running on-premises or in other clouds.
  • Scale out your SQL Server instances using Azure Arc to distribute data processing across multiple servers.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Managed Instance.
  • Azure Monitor for SQL to monitor performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Automatic tuning, Query store, and Azure SQL Analytics.
Azure SQL Database
Azure SQL
A fully managed relational database service that supports SQL Server-compatible Transact-SQL.
Scenarios:
Best used for traditional relational database scenarios, such as online transaction processing (OLTP) and line-of-business (LOB) applications, as well as for small to medium-sized data warehouses.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance, real-time analytics and very large datasets.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Database.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level with a few clicks or automatically with the use of Azure Automation.
  • Scale out using read replicas to distribute read load across multiple servers.
  • Scale out using Azure Elastic Database Pools to share resources among multiple databases.
Monitoring:
Azure SQL Edge
Azure SQL Edge
A small-footprint version of SQL Server optimized for IoT scenarios.
Scenarios:
It's best used for Internet of Things (IoT) and edge computing scenarios, where devices have limited resources and require a lightweight, low-power database.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance or high-transactional workloads.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Edge.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Edge instances.
Monitoring:
Azure SQL Managed Instance
Azure SQL Managed Instance
A fully managed SQL Server instance that provides an almost lift-and-shift experience of moving on-premises SQL Server databases to the cloud.
Scenarios:
It's best used for applications that are currently running on an on-premises SQL Server and need to be moved to the cloud with minimal changes.
Use with:
Not ideal:
It's not the best option if you're looking for a fully managed service with a high level of automation and scalability.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Managed Instance.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level with a few clicks or automatically with the use of Azure Automation.
  • Scale out using read replicas to distribute read load across multiple servers.
  • Scale out using Azure Elastic Database Pools to share resources among multiple databases.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Managed Instance.
  • Azure Monitor for SQL to monitor performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Automatic tuning, Query store, and Azure SQL Analytics.
Azure SQL Server Big Data Clusters
Azure SQL Server Big Data Clusters
A fully-managed service that allows you to run SQL Server, Spark, and HDFS all together on Kubernetes.
Scenarios:
It's best used for big data scenarios and SQL Server scenarios that require integration with Apache Spark and Hadoop ecosystem.
Use with:
Not ideal:
It's not the best option for scenarios that don't require Spark integration.
Backup:
Azure Data Factory is an appropriate backup solution for Azure SQL Server Big Data Clusters. Azure Data Factory allows you to create data pipelines that can move data from Azure SQL Server Big Data Clusters to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups.
Availability:
  • Built-in high availability and disaster recovery options, including automatic failover to a secondary replica and point-in-time restore.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale out your SQL Server Big Data Clusters by adding more nodes to distribute data processing across multiple servers
Monitoring:
Azure SQL Server on Virtual Machines
Azure SQL Server on Virtual Machines
Allows you to run SQL Server on Azure virtual machines, giving you the flexibility to choose your operating system, storage, and networking options.
Scenarios:
It's best used for scenarios where you need full control over the SQL Server environment and have specific requirements that are not met by other Azure SQL services.
Use with:
Not ideal:
It's not the best option for scenarios where you don't need full control over the SQL Server environment or when you have requirements that are not met by other Azure SQL services.
Backup:
Azure Backup is the appropriate backup solution for Azure SQL Server on Virtual Machines.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region, or a different region in the case of a disaster recovery scenario using active-geo replication.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup.
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your SQL Server on Virtual Machines by adjusting the size of the virtual machine.
  • Scale out your SQL Server on Virtual Machines by adding more virtual machines to distribute data processing across multiple servers.
Monitoring:
  • Azure Log Analytics is a good solution to use with Azure SQL Database.
  • Azure Monitor for VMs to monitor the performance of your virtual machines and the underlying infrastructure.
  • SQL Server Management Studio (SSMS) and SQL Server Profiler to monitor and troubleshoot performance issues for SQL Server on Virtual Machines.
Azure Synapse Analytics (formerly SQL Data Warehouse)
Azure Synapse Analytics (formerly SQL Data Warehouse)
A fully managed, cloud-based analytics service that supports big data scenarios.
Scenarios:
Best used for large-scale data warehousing and business intelligence (BI) workloads, as well as for data integration and data analytics.
Use with:
Not ideal:
It's not the best option for scenarios that require high-performance, real-time analytics and very large datasets.
Backup:
Azure Data Factory is an appropriate backup solution for Azure Synapse Analytics. Azure Data Factory allows you to create data pipelines that can move data from Azure Synapse Analytics to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups.
Availability:
  • Built-in high availability with automatic failover to a secondary replica in the same region.
  • Built-in disaster recovery options, including point-in-time restore, and long-term retention backup
  • Built-in read-scale out options, allowing you to distribute read traffic across multiple replicas.
Scalability:
  • Scale up or down the performance level of your data warehouse with a few clicks or automatically with the use of Azure Automation.
  • Scale out your data warehouse using Azure Data Factory to distribute data processing across multiple servers.
  • Scale out your data warehouse using Azure Data Lake Storage to store large amounts of data.
Monitoring:
Azure Log Analytics is a great solution for monitoring Azure Synapse Analytics.

Key Management Services

Azure Key Vault
Azure Key Vault
A secure and scalable cloud-based solution for managing and storing secrets, such as certificates, keys, and passwords.
Scenarios:
Best used for securely storing, managing, and accessing secrets, such as certificates, keys, and passwords, used by cloud applications and services.
Use with:
Everything, when you want secure any kind of secret, password, etc!
Not ideal:
Not applicable - if used for what was created for, it can work with any Azure (or not) Service.
Backup:
Backup and recovery of secrets stored in Azure Key Vault can be achieved by exporting the secrets to a file and then storing the file in a secure location. You can also periodically create snapshots of your Key Vault to use as a backup in case of disaster or data loss.
Availability:
Azure Key Vault provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Key Vault scales to meet the changing needs of your organization, allowing you to store an unlimited number of secrets.
Monitoring:
Azure Key Vault provides monitoring and logging capabilities, including activity logs and diagnostic logs, to help you monitor and troubleshoot the usage and availability of your secrets.

Messaging Services

Azure Event Grid
Azure Event Grid
A fully managed event routing service that enables developers to build event-driven applications.
Scenarios:
  • Event-driven architectures: Event Grid enables you to build event-driven architectures and react to changes in your applications and services in near real-time.
  • Serverless computing: Event Grid can be used to trigger serverless computing resources like Azure Functions or Azure Logic Apps.
  • IoT devices: Event Grid can be used to receive and process telemetry from IoT devices.
  • Event-based applications: Event Grid can be used for event-based applications that need to react to changes in the system.
Use with:
  • Azure Functions: Azure Functions can be triggered by events emitted to Event Grid.
  • Azure Logic Apps: Azure Logic Apps can be used to build workflows that are triggered by events emitted to Event Grid.
  • Azure Service Bus: Azure Service Bus can be used as an intermediary between Event Grid and other services that do not have direct integration.
Not ideal:
High-volume and high-velocity data processing as Event Grid is not optimized for this use case.
Backup:
Use Azure Event Hubs or other data ingestion services as a backup destination for events that are published to Event Grid.
Availability:
Azure Event Grid is highly available as it is a globally distributed service with built-in redundancy.
Scalability:
Scalability possibilities for Azure Event Grid include scaling up and down the number of events processed per second and adding or removing event domains as required.
Monitoring:
Monitoring for Azure Event Grid can be performed through Azure Monitor, which provides insights into the health and performance of the service, as well as diagnostics and logging.
Azure Event Hubs
Azure Event Hubs
A fully managed, real-time data ingestion service for big data streaming and event-processing.
Scenarios:
  • Event Hub is ideal for event and telemetry ingestion, such as IoT (Internet of Things) telemetry, log data, and social media data.
  • It's a great option for large-scale, real-time data processing, such as real-time analytics, event-driven applications, and batch data processing.
Use with:
  • Event Hub works well in combination with other Azure services such as Azure Stream Analytics for real-time data analysis, Azure Functions for serverless event-driven processing, and Azure Notification Hubs for push notifications.
  • It can also be used as a source of data for Azure Databricks, Power BI, and Apache Spark for data warehousing and analytics purposes.
Not ideal:
  • Event Hub is not meant to be used as a transactional database or a long-term data storage solution.
  • It's not recommended to use Event Hub for scenarios where low latency or high throughput is not important.
Backup:
  • Event Hub provides built-in data retention and capture policies that enable you to backup your data.
  • The backup data can be saved to Azure Blob Storage, Azure Data Lake Storage, or other Azure Event Hubs instances for further analysis.
Availability:
  • Event Hub is highly available, with automatic redundancy built into the service.
  • It provides multiple levels of data redundancy, ensuring that your data is safe and available even in the event of hardware failures.
Scalability:
  • Event Hub is designed to scale horizontally and vertically, allowing you to easily handle increases in data volume.
  • It provides features such as partitioning and load balancing, allowing you to handle high-throughput scenarios.
Monitoring:
  • Azure Monitor provides built-in monitoring and logging capabilities for Event Hub, allowing you to track events and troubleshoot issues.
  • It also provides real-time insights into the health, performance, and usage of the service.
Azure Service Bus
Azure Service Bus
A messaging service that enables you to send and receive messages between different systems in a reliable and secure way.
Scenarios:
Best used for scenarios that require reliable messaging and decoupling of systems. It can be used to implement a message-based communication architecture, where different systems can send and receive messages in a loosely coupled way. It can also be used to implement a publish-subscribe pattern, where messages can be sent to multiple subscribers at once.
Use with:
Can be used in combination with Azure Functions, Azure WebJobs, and Azure Logic Apps to process messages in a decoupled way. It can also be used in combination with Azure Event Grid to route messages to different systems based on their content.
Not ideal:
May not be appropriate for scenarios that require extremely high throughput and low latency, such as high-frequency trading systems.
Backup:
Supports automatic data backup and disaster recovery. You can configure automatic backup for your service bus namespace and configure data replication for high availability.
Availability:
It's a globally available service, meaning that it can be accessed from anywhere in the world. Additionally, it provides built-in high availability and automatic failover, which can help ensure that messages are delivered even in case of failures.
Scalability:
It's a highly scalable service that can handle millions of messages per second. You can scale the number of messaging entities, throughput units, and message size according to your needs.
Monitoring:
Azure Service Bus provides several built-in monitoring and logging features that can help you understand how the service is being used and troubleshoot any issues that may arise. You can use Azure Monitor to collect and analyze data from Azure Service Bus, as well as to set up alerts and notifications. Additionally, you can use Azure Log Analytics to collect and analyze log data from Azure Service Bus.

Monitoring Services

Azure Log Analytics
Azure Log Analytics
Provides log collection, search, analysis, and alerting capabilities for your applications and infrastructure.
Scenarios:
Azure Log Analytics is best used for scenarios that require log data analysis and troubleshooting. It can be used to collect and analyze log data from various sources, including Azure services, on-premises systems, and third-party services. With its powerful search capabilities, you can quickly find the information you need to troubleshoot issues and resolve problems.
Use with:
Azure Log Analytics can be used in combination with many other Azure services, including Azure Monitor, Azure Security Center, and Azure Automation, to provide a comprehensive view of your environment and help you monitor and manage your resources.
Not ideal:
Azure Log Analytics may not be appropriate for scenarios that require real-time analysis of log data. The data collection, search, and analysis features of the service are optimized for historical data analysis and troubleshooting.
Backup:
Azure Log Analytics does not require a separate backup solution, as it stores data in a highly durable manner within Azure. The data is stored in multiple locations to protect against failures and data loss. Additionally, you can use the export data feature to export your log data to other storage solutions for backup purposes.
Availability:
Azure Log Analytics is a globally available service that provides built-in redundancy and high availability.
Scalability:
Azure Log Analytics is a highly scalable service that can handle millions of log events per day. You can scale the service to meet your needs by adjusting the number of queries, data ingestion rate, and data retention period.
Monitoring:
Azure Log Analytics provides a wealth of monitoring and alerting features that can help you monitor and manage your environment. You can use the service to set up alerts and notifications based on specific log data patterns, and use the Azure Monitor integration to visualize and analyze log data in real-time. Additionally, you can use the Azure Log Analytics REST API to programmatically access and manage your log data.
Azure Monitor
Azure Monitor
A comprehensive platform for monitoring, managing, and diagnosing applications, infrastructure, and network performance.
Scenarios:
Best used for monitoring the performance, health, and availability of Azure resources, applications, and services. It provides insights into resource utilization, network traffic, and logs.
Use with:
Azure Monitor integrates well with other Azure services, such as Azure Resource Manager, Azure Storage, and Azure Functions, for comprehensive monitoring and management.
Not ideal:
Not applicable - Azure Monitor is an umbrella of services that cover all your needs (e.g. Azure Monitor for SQL)
Availability:
Azure Monitor provides a high level of availability through multiple data centers, with a guaranteed 99.9% uptime SLA.
Scalability:
Azure Monitor scales to meet the changing needs of your organization, allowing you to monitor an unlimited number of resources, applications, and services.

Storage Services

Azure API Management
Azure API Management
A fully managed service for publishing, securing, and managing APIs (Application Programming Interfaces).
Scenarios:
  • Exposing internal APIs to external consumers securely.
  • Creating a portal for external developers to interact with APIs.
  • Implementing rate limiting, security, and logging for APIs.
Use with:
Not ideal:
  • High-performance processing.
  • Applications with strict low latency requirements.
Backup:
Azure API Management has built-in disaster recovery mechanisms and Azure Backup can also be used to backup and restore data.
Availability:
Azure API Management provides high availability through multiple instances running in an active-active configuration.
Scalability:
Azure API Management can be easily scaled up and down as per the requirement.
Monitoring:
Azure Monitor can be used for monitoring the performance and availability of APIs. Azure API Management also provides built-in analytics and monitoring capabilities.
Azure Application Gateway
Azure Application Gateway
A regional layer 7 load balancer that enables you to manage traffic to your web applications.
Scenarios:
  • Load balancing incoming web traffic to multiple back-end servers
  • SSL offloading, reducing the load on your back-end servers and improving performance
  • URL-based routing and path-based routing to direct traffic to specific back-end servers
Use with:
Not ideal:
  • Storing and processing large amounts of data
  • Applications that require complex data processing and computation
Backup:
Azure Backup can be used to back up configuration and data stored in an Azure Application Gateway.
Availability:
  • Azure Application Gateway provides high availability by distributing incoming traffic across multiple instances.
  • The service is highly available in multiple Azure regions and provides automatic failover in the event of an instance failure.
Scalability:
  • Azure Application Gateway can scale up and down based on incoming traffic, with auto-scaling capabilities to handle spikes in demand.
Monitoring:
Azure Monitor provides various monitoring options for the Azure Application Gateway, including performance and usage metrics, activity logs, and alerts.
Azure Traffic Manager
Azure Traffic Manager
A layer-4 global traffic load balancer that enables you to distribute incoming traffic to multiple endpoints based on configurable rules.
Scenarios:
  • Layer 4 load balancing
  • Routing traffic to multiple regions for high availability and performance
  • Routing traffic to multiple cloud service or web apps
  • Redirecting traffic to a new version of a service during a deployment
Use with:
Azure Traffic Manager integrates well with various Azure services, including Azure Web Apps, Azure Virtual Machines, Azure API Management, and Azure Functions, allowing you to distribute incoming traffic to multiple endpoints for high availability and performance.
Not ideal:
Applications that require session persistence as DNS Traffic Manager operates at the domain name level and does not support session persistence.
Backup:
Azure DNS Traffic Manager is a highly available service with built-in redundancy and failover capabilities, so a specific backup solution is not required.
Availability:
Azure DNS Traffic Manager provides global availability with a 99.9% SLA.
Scalability:
Azure DNS Traffic Manager can handle millions of queries per minute and is automatically scalable.
Monitoring:
Azure DNS Traffic Manager provides monitoring and diagnostic information through Azure Monitor and Azure Log Analytics.
Azure Front Door
Azure Front Door
Layer 7 global load balancing across multiple regions to ensure optimal performance for end-users.
Scenarios:
  • Layer 7 global load balancing
  • Best suited for scenarios that require high-scale, globally distributed and highly available applications. It can be used for scenarios such as load balancing, content delivery, and performance optimization.
  • WAF: Front Door includes a Web Application Firewall (WAF) that provides protection against common web-based attacks such as SQL injection and cross-site scripting.
  • SSL/TLS Termination: Front Door supports SSL/TLS termination, allowing you to securely encrypt traffic between users and your backends.
  • Performance Optimization: Front Door optimizes end-to-end performance by using caching, compression, and health checks to ensure that your applications are highly available and fast for users.
Use with:
Azure Front Door can be used in conjunction with Azure CDN, Azure Load Balancer, and Azure Application Gateway for further optimizations and benefits.
Not ideal:
Azure Front Door should not be used as a sole solution for application security.
Backup:
Azure Front Door does not require a specific backup solution as it has built-in high availability and disaster recovery mechanisms.
Availability:
Azure Front Door provides high availability with multiple points of presence (PoPs) and active-active architectures.
Scalability:
Azure Front Door is highly scalable, providing automatic scaling to meet the demands of your application.
Monitoring:
Azure Front Door provides detailed performance metrics and logging capabilities through Azure Monitor, allowing you to monitor and troubleshoot performance issues.
Azure Load Balancer
Azure Load Balancer
A Layer 4 regional load balancer.
Scenarios:
Azure Load Balancer is best suited for distributing incoming traffic across multiple virtual machines or resources, providing high availability and scalability for applications. It can be used for load balancing incoming internet traffic to multiple virtual machines, as well as for internal load balancing for virtual machines in a virtual network.
Use with:
Azure Load Balancer works well in combination with Azure Virtual Machines, Azure Cloud Services, Azure Container Instances and Azure Web Apps.
Not ideal:
Azure Load Balancer is not intended for specific security scenarios such as network security or application-layer protection.
Backup:
Azure Load Balancer does not require a specific backup solution as it is a highly available service within Azure.
Availability:
Azure Load Balancer provides high availability through automatic failover to another instance in case of a failure, ensuring continuity of service.
Scalability:
Azure Load Balancer can automatically scale to accommodate increased traffic and resource needs, providing seamless scalability for applications.
Monitoring:
Azure Load Balancer provides monitoring and diagnostics through Azure Monitor, enabling the tracking of health and performance metrics for the load balancer and the resources it distributes traffic to.

Storage Services

Azure Blob Storage
Azure Blob Storage
A fully managed object storage service that enables you to store and retrieve large amounts of unstructured data, such as text and binary data, in its native format.
Scenarios:
  • Storing unstructured data, such as images, videos, audio, and documents, for distribution and retrieval over the internet.
  • Storing data for backup and disaster recovery, as it provides a durable and cost-effective storage solution.
  • Storing data for big data analytics, as it can be easily accessed and processed using Azure Data Factory and Azure HDInsight.
Use with:
  • Azure Functions, can be used to process data stored in Azure Blob Storage and take actions based on the data.
  • Azure Data Factory, a fully managed data integration service that can be used to transfer data from Azure Blob Storage to other Azure services for further processing and analysis.
  • Azure HDInsight, a fully-managed cloud service that makes it easy to process big data using popular open-source frameworks such as Apache Hadoop, Hive, and Spark.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Blob Storage is optimized for reliability and durability rather than speed.
  • Applications that require strong consistency guarantees, as Azure Blob Storage provides eventual consistency.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Blob Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Blob Storage to another region.
Availability:
Azure Blob Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Blob Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Blob Storage, and receive alerts and notifications in case of issues.
Azure Cosmos DB
Azure Cosmos DB
A fully managed, globally distributed, multi-model database service that supports document, key-value, graph, and column-family data models.
Scenarios:
It's best used for globally distributed, low-latency, and highly available web, mobile, gaming, IoT, and AI applications.
Use with:
Not ideal:
It's not the best option for scenarios that require a traditional relational database with advanced querying capabilities like joins and sub-queries.
Backup:
Azure Data Factory is an appropriate backup solution for Azure Cosmos DB. a href="#azure-data-factory">Azure Data Factory allows you to create data pipelines that can move data from Azure Cosmos DB to Azure Blob Storage, Azure Data Lake Storage, or other data stores. This allows you to create backups of your data in another location, and also allows you to do incremental backups
Availability:
  • Built-in high availability and global distribution, allowing you to replicate your data across multiple regions for low-latency access and high availability.
  • Built-in disaster recovery options, including point-in-time restore and configurable consistency levels for different use cases.
Scalability:
  • Scale up or down the performance level of your database with a few clicks or automatically with the use of Azure Automation.
  • Scale out your database by adding more regions or Azure Virtual Network to distribute data across multiple servers.
  • Scale out your database by partitioning your data to distribute data across multiple servers.
Monitoring:
  • Azure Log Analytics is the best monitoring solution to use with Azure SQL Edge.
  • Azure Monitor can be used to monitor Azure Data Factory performance and troubleshoot issues.
  • Built-in monitoring capabilities such as Metrics, Alerts, and Diagnostic logs that enables you to track performance, troubleshoot issues, and identify performance bottlenecks.
Azure Data Lake Storage
Azure Data Lake Storage
A highly scalable and secure data lake that enables you to store large amounts of data, including structured and unstructured data, in its native format.
Scenarios:
  • Storing and processing large amounts of structured and unstructured data for big data analytics.
  • Storing data for machine learning and artificial intelligence applications.
  • Storing and processing log and telemetry data.
  • Storing and processing data for business intelligence and reporting.
Use with:
  • Azure Databricks, a fast, easy, and collaborative Apache Spark-based analytics platform that can be used to process data stored in Azure Data Lake Storage.
  • Azure HDInsight, a fully-managed cloud service that makes it easy to process big data using popular open-source frameworks such as Apache Hadoop, Hive, and Spark.
  • Azure Stream Analytics, can be used to stream data into Azure Data Lake Storage for real-time analytics and reporting.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Data Lake Storage is optimized for large scale batch processing.
  • Applications that require strong consistency guarantees, as Azure Data Lake Storage provides eventual consistency.
Backup:
  • Azure Backup: A fully managed backup service that can be used to protect data stored in Azure Data Lake Storage.
  • Azure Site Recovery: A disaster recovery solution that can be used to replicate data stored in Azure Data Lake Storage to another region.
Availability:
Azure Data Lake Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Data Lake Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Data Lake Storage, and receive alerts and notifications in case of issues.
Azure Queue Storage
Azure Queue Storage
A fully managed message queue that enables you to store and retrieve large numbers of messages, so you can send and receive messages between independent systems.
Scenarios:
  • Reliable communication between applications and microservices, especially when the communication involves multiple steps and can be performed asynchronously.
  • Processing batch jobs by breaking them into smaller tasks that can be processed by multiple worker roles in parallel.
  • Storing messages for later processing, such as emails or push notifications.
Use with:
  • Azure Functions, can be used to process messages stored in Azure Queue Storage and take actions based on the messages.
  • Azure Service Bus, can be used to provide reliable and secure messaging between applications and services.
Not ideal:
  • Applications that require low latency and high-frequency data access, as Azure Queue Storage is optimized for reliability and durability rather than speed.
  • Applications that require strong consistency guarantees, as Azure Queue Storage provides eventual consistency.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Queue Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Queue Storage to another region.
Availability:
Azure Queue Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Queue Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Queue Storage, and receive alerts and notifications in case of issues.
Azure Table Storage
Azure Table Storage
A scalable, low-cost NoSQL key-value store that can be used to store and query large amounts of unstructured data.
Scenarios:
  • Storing large amounts of structured data for applications such as analytics, reporting, or auditing.
  • Storing metadata or reference data for applications.
  • Storing data that does not need complex transactions or relationships, but still requires fast and efficient access.
Use with:
  • Azure Functions can be used to process data stored in Azure Table Storage and take actions based on the data.
  • Azure Stream Analytics can be used to stream data from IoT devices into Azure Table Storage for real-time analytics and reporting.
  • Azure Data Factory can be used to extract, transform, and load data into Azure Table Storage for reporting and analytics.
Not ideal:
  • Applications that require complex transactions or relationships between data entities.
  • Applications that require a relational data model.
  • Applications that require strong consistency guarantees.
Backup:
  • Azure Backup, a fully managed backup service that can be used to protect data stored in Azure Table Storage.
  • Azure Site Recovery, a disaster recovery solution that can be used to replicate data stored in Azure Table Storage to another region.
Availability:
Azure Table Storage is designed for high availability, with data automatically distributed across multiple storage nodes to ensure reliability and durability.
Scalability:
Azure Table Storage is highly scalable, and can be easily scaled up or down to meet the changing needs of your application.
Monitoring:
Azure Monitor, a fully managed monitoring service that can be used to monitor the health and performance of Azure Table Storage, and receive alerts and notifications in case of issues.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/a-hello-world-with-microsoft-machine-learning-framework-ml-net.html b/_output/a-hello-world-with-microsoft-machine-learning-framework-ml-net.html index 7426980b7..cda911b77 100644 --- a/_output/a-hello-world-with-microsoft-machine-learning-framework-ml-net.html +++ b/_output/a-hello-world-with-microsoft-machine-learning-framework-ml-net.html @@ -1,5 +1,5 @@ -A Hello World with Microsoft’s Machine Learning framework, ML.NET

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

A Hello World with Microsoft’s Machine Learning framework, ML.NET

by George Kosmidis / Published 4 years and 2 months ago
A Hello World with Microsoft’s Machine Learning framework, ML.NET

Artificial Intelligence, Machine Learning and all relevant keywords have been leading the headlines lately and for good reason. This new field has already transformed industries across the globe, and companies are racing to understand how to integrate this emerging technology: If we had an AI ready to give answers, what would we ask? And if we can think of a question, is it valid for an AI?

Introduction

First things first, let’s initially see how Data Analytics lead to Machine Learning scenarios, and then check ML.NET, Microsoft’s solution for everyone but especially for #ASPNET developers.

Step 1, What is Data Analytics

Through data mining and various other technics, vast quantities of -sometimes- unstructured data are collected. The analysis of those for commonalities (such as averages, ratios, known math graphs, etc.) is presented through aggregations on a dashboard, and humans are responsible for making assumptions and predicting the future.

Step 2, What is Predictive Analytics

Through the analysis done in the previous step, we naturally end up predicting what will come tomorrow. Predictions are based on historical repeated data and humans are called to identify those patterns in the data, in advanced scenarios write the math equations that represent this pattern, verify them, test them, adjust them and finally apply that hard-earned logic to new unknown data and predict the results.

Step 3, What is Machine Learning

Machine learning could be explained as a predictive analysis process with one key difference. A machine and not a human is making the assumptions, the tests and the adjustments in order to finally learn how to predict results. Why is this better? Because a machine can study millions of different datasets that contain millions of theoretically unlinked data in ways and speeds that are foreign to human nature. Through this study it can discover connections that “shouldn’t be possible” and give solutions when functions are unknown or too complex to discover.

The simplest way that I can think of to explain the difference between predictive analytics and machine learning solutions, could be expressed somehow mathematically:

A function f is applied to x and transforms it to y: f(x)=y
If we know f and x but not y, it is not a machine learning problem.
If we know x and partially y but not f, then it is a machine learning problem.

Data Preparation

We are not going to get deeper on the subject, but a crucial factor of success for every step is finding and preparing data, the so called data pre-processing techniques. Although they come with many names and there are various techniques to achieve, we are just going to mention a few and leave the rest for a google search!

  • Data collection
    Self explanatory but a rather difficult step: Do you have tones of it somewhere? Collect them and try to aggregate them.
  • Feature Selection
    Identify those input variables that are most relevant to the task.
  • Data Profiling
    Check for trends, outliers, exceptions, incorrect, inconsistent, missing, or skewed information. Make your data consistent.
  • Data Quality
    Dealing with erroneous data, missing values, extreme values, and outliers in your data
  • Feature Engineering
    Derive new variables from available data.

ML.NET

What is ML.NET

ML.NET is a free, open source, and cross platform machine learning framework for the .NET developer platform.

ML.NET allows you to train, build, and ship custom machine learning models using C# or F# for a variety of ML scenarios. ML.NET includes features like automated machine learning (AutoML) and tools like ML.NET CLI and ML.NET Model Builder, which make integrating machine learning into your applications even easier.

A Hello World with ML.NET

Although this is a bit more complicated than just your average Hello World app, we could easily separate it in 7 distinct steps.

In case you want to check a working example instead of reading the next steps, you might find Microsoft.ML.Forecasting.GlobalTemperature on my GitHub account useful.

1. The ML.NET Context

MLContext is the starting point for all ML.NET operations. The MLContext is used for all aspects of creating and consuming an ML.NET model. It is similar conceptually to DbContext in Entity Framework.

var mlContext = new MLContext();

2. Load data

Data in ML.NET is represented as an IDataView, which is a flexible, efficient way of describing tabular data (for example, rows and columns). You can load data from files or from real-time streaming sources to an IDataView. For example LoadFromTextFile allows you to load data from TXT, CSV, TSV, and other file formats.

var trainingData = mlContext.Data
+A Hello World with Microsoft’s Machine Learning framework, ML.NET

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

A Hello World with Microsoft’s Machine Learning framework, ML.NET

by George Kosmidis / Published 4 years and 2 months ago
A Hello World with Microsoft’s Machine Learning framework, ML.NET

Artificial Intelligence, Machine Learning and all relevant keywords have been leading the headlines lately and for good reason. This new field has already transformed industries across the globe, and companies are racing to understand how to integrate this emerging technology: If we had an AI ready to give answers, what would we ask? And if we can think of a question, is it valid for an AI?

Introduction

First things first, let’s initially see how Data Analytics lead to Machine Learning scenarios, and then check ML.NET, Microsoft’s solution for everyone but especially for #ASPNET developers.

Step 1, What is Data Analytics

Through data mining and various other technics, vast quantities of -sometimes- unstructured data are collected. The analysis of those for commonalities (such as averages, ratios, known math graphs, etc.) is presented through aggregations on a dashboard, and humans are responsible for making assumptions and predicting the future.

Step 2, What is Predictive Analytics

Through the analysis done in the previous step, we naturally end up predicting what will come tomorrow. Predictions are based on historical repeated data and humans are called to identify those patterns in the data, in advanced scenarios write the math equations that represent this pattern, verify them, test them, adjust them and finally apply that hard-earned logic to new unknown data and predict the results.

Step 3, What is Machine Learning

Machine learning could be explained as a predictive analysis process with one key difference. A machine and not a human is making the assumptions, the tests and the adjustments in order to finally learn how to predict results. Why is this better? Because a machine can study millions of different datasets that contain millions of theoretically unlinked data in ways and speeds that are foreign to human nature. Through this study it can discover connections that “shouldn’t be possible” and give solutions when functions are unknown or too complex to discover.

The simplest way that I can think of to explain the difference between predictive analytics and machine learning solutions, could be expressed somehow mathematically:

A function f is applied to x and transforms it to y: f(x)=y
If we know f and x but not y, it is not a machine learning problem.
If we know x and partially y but not f, then it is a machine learning problem.

Data Preparation

We are not going to get deeper on the subject, but a crucial factor of success for every step is finding and preparing data, the so called data pre-processing techniques. Although they come with many names and there are various techniques to achieve, we are just going to mention a few and leave the rest for a google search!

  • Data collection
    Self explanatory but a rather difficult step: Do you have tones of it somewhere? Collect them and try to aggregate them.
  • Feature Selection
    Identify those input variables that are most relevant to the task.
  • Data Profiling
    Check for trends, outliers, exceptions, incorrect, inconsistent, missing, or skewed information. Make your data consistent.
  • Data Quality
    Dealing with erroneous data, missing values, extreme values, and outliers in your data
  • Feature Engineering
    Derive new variables from available data.

ML.NET

What is ML.NET

ML.NET is a free, open source, and cross platform machine learning framework for the .NET developer platform.

ML.NET allows you to train, build, and ship custom machine learning models using C# or F# for a variety of ML scenarios. ML.NET includes features like automated machine learning (AutoML) and tools like ML.NET CLI and ML.NET Model Builder, which make integrating machine learning into your applications even easier.

A Hello World with ML.NET

Although this is a bit more complicated than just your average Hello World app, we could easily separate it in 7 distinct steps.

In case you want to check a working example instead of reading the next steps, you might find Microsoft.ML.Forecasting.GlobalTemperature on my GitHub account useful.

1. The ML.NET Context

MLContext is the starting point for all ML.NET operations. The MLContext is used for all aspects of creating and consuming an ML.NET model. It is similar conceptually to DbContext in Entity Framework.

var mlContext = new MLContext();

2. Load data

Data in ML.NET is represented as an IDataView, which is a flexible, efficient way of describing tabular data (for example, rows and columns). You can load data from files or from real-time streaming sources to an IDataView. For example LoadFromTextFile allows you to load data from TXT, CSV, TSV, and other file formats.

var trainingData = mlContext.Data
     .LoadFromTextFile<SentimentInput>(dataPath, separatorChar: ',', hasHeader: true);

Learn more about loading data here.

3. Transform data

This is data pre-processing made easy, since usually data are not ready to be consumed! Transformers take data, do some work on it, and return new, transformed data. For example, did you know that you can only feed numbers to the engine? This is how a text is being transformed:

 FeaturizeText("This is a text we want to use") => [0.86, 0.67, 0.45, 0.99....]
 

There are built-in set of data transforms for replacing missing values, data conversion, featurizing text, and more.

// Convert sentiment text into numeric features
@@ -22,4 +22,4 @@
 var predEngine = mlContext.Model.CreatePredictionEngine(model); 
 var sampleComment = new SentimentInput{ SentimentText = "This is very rude!" }; 
 var result = predEngine.Predict(sampleComment);
-Console.WriteLine(result.Prediction);

Done!

Quite a long Hello World right? Well, not exactly! If you think that you just used 15-20 lines of code to train a machine to give you answers, it doesn’t seem that long! Could you imagine that just a few years ago?

In case you want to check a working example, you might find Microsoft.ML.Forecasting.GlobalTemperature on my GitHub account useful.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Console.WriteLine(result.Prediction);

Done!

Quite a long Hello World right? Well, not exactly! If you think that you just used 15-20 lines of code to train a machine to give you answers, it doesn’t seem that long! Could you imagine that just a few years ago?

In case you want to check a working example, you might find Microsoft.ML.Forecasting.GlobalTemperature on my GitHub account useful.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/action-results-in-asp-net-core-apis.html b/_output/action-results-in-asp-net-core-apis.html index a8dcd8412..c2b2bb298 100644 --- a/_output/action-results-in-asp-net-core-apis.html +++ b/_output/action-results-in-asp-net-core-apis.html @@ -1,5 +1,5 @@ -Action results in ASP.NET CORE APIs

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Action results in ASP.NET CORE APIs

by George Kosmidis / Published 5 years and 1 month ago, modified 4 years and 3 months ago
Action results in ASP.NET CORE APIs

ASP.NET Core supports creating RESTful services, also known as web APIs. To handle requests, a web API uses controllers with actions (in essence methods) that return an ActionResult. Since an ActionResult can be almost anything (it’s like returning an object from your methods), it makes sense to know how to use it and when to choose to return a specific type instead.

Let’s go through the each different return type, starting from the simplest one and work our why towards the most generic ActionResult.

Controller action return types

There are three controller action return types in ASP.NET Core:

  • Specific type
  • IActionResult
  • ActionResult<T>

The first one is the simplest one. If there are no validation checks, no special conditions to safeguard and an action only returns a primitive or a complex type, there is no reason to worry about multiple action results. Check this gist for example:

//Primitive Type
+Action results in ASP.NET CORE APIs

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Action results in ASP.NET CORE APIs

by George Kosmidis / Published 5 years and 1 month ago, modified 4 years and 3 months ago
Action results in ASP.NET CORE APIs

ASP.NET Core supports creating RESTful services, also known as web APIs. To handle requests, a web API uses controllers with actions (in essence methods) that return an ActionResult. Since an ActionResult can be almost anything (it’s like returning an object from your methods), it makes sense to know how to use it and when to choose to return a specific type instead.

Let’s go through the each different return type, starting from the simplest one and work our why towards the most generic ActionResult.

Controller action return types

There are three controller action return types in ASP.NET Core:

  • Specific type
  • IActionResult
  • ActionResult<T>

The first one is the simplest one. If there are no validation checks, no special conditions to safeguard and an action only returns a primitive or a complex type, there is no reason to worry about multiple action results. Check this gist for example:

//Primitive Type
 [HttpGet]
 public int GetOne()
 {
@@ -50,4 +50,4 @@
     }
     
     return Ok(new {Id = 1, Name = "George" };);
-}

Conclusion

Compiler vendors expect exceptions to be thrown rarely because they are -as the name suggests- exceptions of the normal flow. They focus more on collecting information about why this rare event happened and much less about optimizing the throw code. This makes the use of exceptions very expensive, and thus HttpResponseException was completely removed in ASP.NET Core. The alternative and suggested way is now ActionResult<T>, as it is also contributes towards readability and the principle of least astonishment. Nevertheless, your actions should always return one specific type wrapped in an ActionResult<T> that allows multiple ActionResult return types, and not the other way around.

Changing a little bit what Damian Conway wrote in his book Perl Best Practices:

[…] Always code as if the person who ends up using your API will be a violent psychopath who knows where your IP.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Conclusion

Compiler vendors expect exceptions to be thrown rarely because they are -as the name suggests- exceptions of the normal flow. They focus more on collecting information about why this rare event happened and much less about optimizing the throw code. This makes the use of exceptions very expensive, and thus HttpResponseException was completely removed in ASP.NET Core. The alternative and suggested way is now ActionResult<T>, as it is also contributes towards readability and the principle of least astonishment. Nevertheless, your actions should always return one specific type wrapped in an ActionResult<T> that allows multiple ActionResult return types, and not the other way around.

Changing a little bit what Damian Conway wrote in his book Perl Best Practices:

[…] Always code as if the person who ends up using your API will be a violent psychopath who knows where your IP.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/an-error-occurred-while-starting-the-application-process-failure-and-many-more.html b/_output/an-error-occurred-while-starting-the-application-process-failure-and-many-more.html index 421c66a63..1437e8356 100644 --- a/_output/an-error-occurred-while-starting-the-application-process-failure-and-many-more.html +++ b/_output/an-error-occurred-while-starting-the-application-process-failure-and-many-more.html @@ -1,2 +1,2 @@ -An error occurred while starting the application, Process Failure and many more

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

An error occurred while starting the application, Process Failure and many more

by George Kosmidis / Published 4 years and 2 months ago
An error occurred while starting the application, Process Failure and many more

It comes in many colors and flavors, it is usually a headache because there are multiple reasons why you can get this, it usually includes no (or minimal) information in Application log, and if you are unlucky enough to have two problems that cause this, it is a guaranteed bad day.

In this blog post I will try to include as many solutions as possible, please feel free to comment and contribute one if it is not included.

Possible Error Messages

This is just a list the messages you might get, probably not complete. Feel free to comment if I missed some.

  • An error occurred while starting the application
  • 403.14 Forbidden
  • 502.5 Process Failure
  • 500 Internal Server Error
  • 500.0 In-Process Handler Load Failure
  • 500.30 In-Process Startup Failure
  • 500.31 ANCM Failed to Find Native Dependencies
  • 500.32 ANCM Failed to Load dll
  • 500.33 ANCM Request Handler Load Failure
  • 500.34 ANCM Mixed Hosting Models Not Supported
  • 500.35 ANCM Multiple In-Process Applications in same Process
  • 500.36 ANCM Out-Of-Process Handler Load Failure
  • 500.37 ANCM Failed to Start Within Startup Time Limit
  • 500.38 ANCM Application DLL Not Found
  • 503 Service unavailable
  • Failed to start application (ErrorCode ‘0x800700c1’)
  • Connection reset

Possible Solutions

Please keep in mind, most solutions require the application pool to restart. That means, after applying a solution, you need to go to the IIS on the hosting system, find the correct application pool, and restart it. Find out exactly how here.

  1. The app did start, but it can’t generate a valid response.
    Try debugging locally, correct the error and then redeploy.
  2. dotnet is not installed on the hosting system.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  3. dotnet version is wrong, run dotnet --version in CMD to verify.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  4. appsettings.[ENVIRONMENT_NAME].json for the specific environment is not deployed.
    Create the necessary appsettings file.
  5. appsettings.json or appsettings.[ENVIRONMENT_NAME].json doesn’t contain all necessary settings.
    Add all settings from the correct appsettings file.
  6. You enabled XML documentation but the XML documentation file path is wrong.
    Right click on your project in Visual Studio, go to Properties, then Build and correct the Documentation XML file path to relative one.
  7. Permissions on the remote machine folders are not set correctly.
    For testing only: try adding Everyone and reset permissions on all child objects. Read this for correct permissions.
  8. The app is deployed to the wrong folder on the hosting system.
    Go to IIS, find your Site and click Explore on the write to find the correct path.
  9. The web.config file is missing from the deployment, or the web.config file contents are malformed.
    Right click on your project in Visual Studio and go to Publish. Execute a publishment and use that web.config.
  10. The web.config contains hostingModel="inprocess" (or it doesn’t).
    Either remove it if it is there, or add it if it is not.
  11. The app is not published for the same processor architecture.
    Check the processor architecture in the hosting system and select the correct one during publishment.
  12. Run the app in a separate IIS application pool.
    Go to the IIS on the hosting machine, navigate to Application Pools, click on Add Application Pool…, write the Name you with and click OK. Once done, go to Sites, find the correct app and click on Basic Settings to select the newly created Application Pool.
  13. Repair the installation of the .NET Core Hosting Bundle or install the SDK.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  14. Check for CPU/Memory usage spikes on the server during startup.
    Try upgrading the hosting machine.
  15. Disable single-file publishing.
    To do this, set the PublishSingleFile MSBuild property to false.
  16. Switch to the out-of-process hosting model.
    To do this, set the AspNetCoreHostingModel MSBuild property to OutOfProcess.

Enable Logging

The ASP.NET Core Module stdout log often records useful error messages not found in the Application Event Log. To enable and view stdout logs:

  1. Navigate to the site’s deployment folder on the hosting system.
  2. Edit the web.config file. Set stdoutLogEnabled to true and change the stdoutLogFile path to point to the logs folder (for example, .\_logs\stdout). stdout in the path is the log file name prefix. A timestamp, process id, and file extension are added automatically when the log is created.
  3. If the logs folder isn’t present, create the folder.
  4. Ensure your application pool’s identity has write permissions to the logs folder.
  5. Save the updated web.config file.
  6. Make a request to the app.
  7. Navigate to the logs folder. Find and open the most recent stdout log.
  8. Study the log for errors.

Contribute please!

If you find a reason for this error that it’s not included here, please contribute!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +An error occurred while starting the application, Process Failure and many more

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

An error occurred while starting the application, Process Failure and many more

by George Kosmidis / Published 4 years and 2 months ago
An error occurred while starting the application, Process Failure and many more

It comes in many colors and flavors, it is usually a headache because there are multiple reasons why you can get this, it usually includes no (or minimal) information in Application log, and if you are unlucky enough to have two problems that cause this, it is a guaranteed bad day.

In this blog post I will try to include as many solutions as possible, please feel free to comment and contribute one if it is not included.

Possible Error Messages

This is just a list the messages you might get, probably not complete. Feel free to comment if I missed some.

  • An error occurred while starting the application
  • 403.14 Forbidden
  • 502.5 Process Failure
  • 500 Internal Server Error
  • 500.0 In-Process Handler Load Failure
  • 500.30 In-Process Startup Failure
  • 500.31 ANCM Failed to Find Native Dependencies
  • 500.32 ANCM Failed to Load dll
  • 500.33 ANCM Request Handler Load Failure
  • 500.34 ANCM Mixed Hosting Models Not Supported
  • 500.35 ANCM Multiple In-Process Applications in same Process
  • 500.36 ANCM Out-Of-Process Handler Load Failure
  • 500.37 ANCM Failed to Start Within Startup Time Limit
  • 500.38 ANCM Application DLL Not Found
  • 503 Service unavailable
  • Failed to start application (ErrorCode ‘0x800700c1’)
  • Connection reset

Possible Solutions

Please keep in mind, most solutions require the application pool to restart. That means, after applying a solution, you need to go to the IIS on the hosting system, find the correct application pool, and restart it. Find out exactly how here.

  1. The app did start, but it can’t generate a valid response.
    Try debugging locally, correct the error and then redeploy.
  2. dotnet is not installed on the hosting system.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  3. dotnet version is wrong, run dotnet --version in CMD to verify.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  4. appsettings.[ENVIRONMENT_NAME].json for the specific environment is not deployed.
    Create the necessary appsettings file.
  5. appsettings.json or appsettings.[ENVIRONMENT_NAME].json doesn’t contain all necessary settings.
    Add all settings from the correct appsettings file.
  6. You enabled XML documentation but the XML documentation file path is wrong.
    Right click on your project in Visual Studio, go to Properties, then Build and correct the Documentation XML file path to relative one.
  7. Permissions on the remote machine folders are not set correctly.
    For testing only: try adding Everyone and reset permissions on all child objects. Read this for correct permissions.
  8. The app is deployed to the wrong folder on the hosting system.
    Go to IIS, find your Site and click Explore on the write to find the correct path.
  9. The web.config file is missing from the deployment, or the web.config file contents are malformed.
    Right click on your project in Visual Studio and go to Publish. Execute a publishment and use that web.config.
  10. The web.config contains hostingModel="inprocess" (or it doesn’t).
    Either remove it if it is there, or add it if it is not.
  11. The app is not published for the same processor architecture.
    Check the processor architecture in the hosting system and select the correct one during publishment.
  12. Run the app in a separate IIS application pool.
    Go to the IIS on the hosting machine, navigate to Application Pools, click on Add Application Pool…, write the Name you with and click OK. Once done, go to Sites, find the correct app and click on Basic Settings to select the newly created Application Pool.
  13. Repair the installation of the .NET Core Hosting Bundle or install the SDK.
    Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and download the latest version. Try the SDK for older OS.
  14. Check for CPU/Memory usage spikes on the server during startup.
    Try upgrading the hosting machine.
  15. Disable single-file publishing.
    To do this, set the PublishSingleFile MSBuild property to false.
  16. Switch to the out-of-process hosting model.
    To do this, set the AspNetCoreHostingModel MSBuild property to OutOfProcess.

Enable Logging

The ASP.NET Core Module stdout log often records useful error messages not found in the Application Event Log. To enable and view stdout logs:

  1. Navigate to the site’s deployment folder on the hosting system.
  2. Edit the web.config file. Set stdoutLogEnabled to true and change the stdoutLogFile path to point to the logs folder (for example, .\_logs\stdout). stdout in the path is the log file name prefix. A timestamp, process id, and file extension are added automatically when the log is created.
  3. If the logs folder isn’t present, create the folder.
  4. Ensure your application pool’s identity has write permissions to the logs folder.
  5. Save the updated web.config file.
  6. Make a request to the app.
  7. Navigate to the logs folder. Find and open the most recent stdout log.
  8. Study the log for errors.

Contribute please!

If you find a reason for this error that it’s not included here, please contribute!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/an-introduction-to-semantic-kernel-and-semantic-understanding.html b/_output/an-introduction-to-semantic-kernel-and-semantic-understanding.html index 456178ea7..f207db19c 100644 --- a/_output/an-introduction-to-semantic-kernel-and-semantic-understanding.html +++ b/_output/an-introduction-to-semantic-kernel-and-semantic-understanding.html @@ -1,5 +1,5 @@ -An Introduction to Semantic Kernel and Semantic Understanding

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

An Introduction to Semantic Kernel and Semantic Understanding

by George Kosmidis / Published 6 months ago
An Introduction to Semantic Kernel and Semantic Understanding

Introduction

The evolution of Artificial Intelligence and its integration into development frameworks has significantly enhanced the capabilities of applications in data processing and analysis. Semantic Kernel, with its extensibility and compatibility with models from OpenAI, Azure OpenAI, Hugging Face, and soon to include more, offers a unique opportunity for .NET developers to elevate their applications. This post dives into the concept of Semantic Kernel, its significance, and practical examples of its application in Semantic Understanding.

Semantic Kernel

Semantic Kernel is a lightweight, open-source Software Development Kit (SDK) designed to enable the integration of AI capabilities with existing code through plugins. This orchestration allows developers to automate tasks and process data intelligently within their .NET applications. By leveraging Semantic Kernel, developers can describe their code to AI models, enabling these models to call the described functions, thereby achieving a seamless integration of AI capabilities into existing applications.

With that said, one might wonder how an AI model can call my C# or Python scripts? The answer, in short, is Semantic Understanding!

Semantic Understanding

Semantic understanding, in the context of integrating AI models with existing code through platforms like Semantic Kernel, refers to the ability of the system to comprehend the purpose, capabilities, and requirements of a piece of code based on its descriptions. This understanding goes beyond just recognizing code syntax; it involves grasping the functional role that the code plays within an application, much like understanding the meaning of words and sentences in human language.

In the context of Semantic Kernel, Semantic Understanding allows AI models to interact intelligently with existing codebases. It simplifies the process of building AI-powered applications by providing a layer that translates between AI model requests and the actions that application code can perform. This enables developers to focus on what their code does rather than how it integrates with AI, fostering innovation and easing the incorporation of AI into software solutions.

How Semantic Understanding is Achieved

  1. Annotations and Descriptions: Developers annotate their code with metadata that describes what the code does, its inputs, outputs, and side effects. These annotations act like comments that are meant to be understood by the Semantic Kernel rather than by humans or the compiler.

  2. Exposing Capabilities: By describing functions and methods in this way, the code effectively communicates its capabilities to the Semantic Kernel, enabling it to "know" what actions it can perform with the code. For example, a function that sends emails would be annotated to indicate that it can send messages to specified email addresses.

  3. AI Model Requests: When AI models (such as chatbots, assistants, or decision-making systems) require performing an action, they issue requests in natural language or structured commands. The Semantic Kernel uses its semantic understanding of the code to map these requests to the appropriate pieces of annotated code.

Two decorations can be used on your methods and attributes to achieve Semantic Understanding:

  • [KernelFunction] marks a method as callable by the Semantic Kernel. It indicates that the method can be invoked as part of the AI's decision-making process or in response to a query. This is crucial for integrating custom logic or external services into the Semantic Kernel's execution flow.
  • [Description(string)] provides metadata about the method it decorates.

How Semantic Understanding is Used

  1. Automated Task Execution: Semantic understanding allows Semantic Kernel to automatically select and execute pieces of code in response to AI model requests. For instance, if an AI model needs to retrieve data, it doesn't need to know how to query a database. Instead, it requests the data it needs, and Semantic Kernel executes the corresponding described code.

  2. Dynamic Orchestration: The system can dynamically orchestrate complex workflows involving multiple steps and different pieces of code based on its understanding. This orchestration is guided by the semantic descriptions of capabilities, making it possible to adapt to various tasks without hardcoded integrations.

  3. Enhanced Interoperability: Semantic understanding enhances the interoperability between disparate systems and AI models. By understanding the semantics of different pieces of code, Semantic Kernel can bridge the gap between them, enabling them to work together seamlessly.

  4. Simplifying AI Integration: Developers can integrate sophisticated AI functionalities into their applications without deep knowledge of AI model internals. They focus on describing what their code does, and Semantic Kernel handles the rest, making AI integration accessible to a broader range of developers.

  5. Facilitating Responsible AI Usage: With a deeper understanding of what code does, Semantic Kernel can help ensure that AI models are used responsibly. It can prevent certain actions based on context or user preferences, aligning AI behavior with ethical guidelines and user expectations.

But let's explore all that with a common scenario, let's illustrate how Semantic Kernel utilizes semantic understanding through a simplified example, focusing on an AI-powered application that automates customer support by categorizing and responding to user queries.

Example: AI-Powered Customer Support

Step 1: Decorating code

Imagine we have a web application that receives various customer support queries. Some queries are about technical issues ("I'm having trouble logging in"), while others are about billing ("I was overcharged this month"). We want to use Semantic Kernel to automatically categorize these queries and provide a standardized response based on the category. To solve this, lets assume we already have the following two objects that act as solution entry points for the two different request types.

public class HandleTechnicalIssuePlugin
+An Introduction to Semantic Kernel and Semantic Understanding

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

An Introduction to Semantic Kernel and Semantic Understanding

by George Kosmidis / Published 6 months ago
An Introduction to Semantic Kernel and Semantic Understanding

Introduction

The evolution of Artificial Intelligence and its integration into development frameworks has significantly enhanced the capabilities of applications in data processing and analysis. Semantic Kernel, with its extensibility and compatibility with models from OpenAI, Azure OpenAI, Hugging Face, and soon to include more, offers a unique opportunity for .NET developers to elevate their applications. This post dives into the concept of Semantic Kernel, its significance, and practical examples of its application in Semantic Understanding.

Semantic Kernel

Semantic Kernel is a lightweight, open-source Software Development Kit (SDK) designed to enable the integration of AI capabilities with existing code through plugins. This orchestration allows developers to automate tasks and process data intelligently within their .NET applications. By leveraging Semantic Kernel, developers can describe their code to AI models, enabling these models to call the described functions, thereby achieving a seamless integration of AI capabilities into existing applications.

With that said, one might wonder how an AI model can call my C# or Python scripts? The answer, in short, is Semantic Understanding!

Semantic Understanding

Semantic understanding, in the context of integrating AI models with existing code through platforms like Semantic Kernel, refers to the ability of the system to comprehend the purpose, capabilities, and requirements of a piece of code based on its descriptions. This understanding goes beyond just recognizing code syntax; it involves grasping the functional role that the code plays within an application, much like understanding the meaning of words and sentences in human language.

In the context of Semantic Kernel, Semantic Understanding allows AI models to interact intelligently with existing codebases. It simplifies the process of building AI-powered applications by providing a layer that translates between AI model requests and the actions that application code can perform. This enables developers to focus on what their code does rather than how it integrates with AI, fostering innovation and easing the incorporation of AI into software solutions.

How Semantic Understanding is Achieved

  1. Annotations and Descriptions: Developers annotate their code with metadata that describes what the code does, its inputs, outputs, and side effects. These annotations act like comments that are meant to be understood by the Semantic Kernel rather than by humans or the compiler.

  2. Exposing Capabilities: By describing functions and methods in this way, the code effectively communicates its capabilities to the Semantic Kernel, enabling it to "know" what actions it can perform with the code. For example, a function that sends emails would be annotated to indicate that it can send messages to specified email addresses.

  3. AI Model Requests: When AI models (such as chatbots, assistants, or decision-making systems) require performing an action, they issue requests in natural language or structured commands. The Semantic Kernel uses its semantic understanding of the code to map these requests to the appropriate pieces of annotated code.

Two decorations can be used on your methods and attributes to achieve Semantic Understanding:

  • [KernelFunction] marks a method as callable by the Semantic Kernel. It indicates that the method can be invoked as part of the AI's decision-making process or in response to a query. This is crucial for integrating custom logic or external services into the Semantic Kernel's execution flow.
  • [Description(string)] provides metadata about the method it decorates.

How Semantic Understanding is Used

  1. Automated Task Execution: Semantic understanding allows Semantic Kernel to automatically select and execute pieces of code in response to AI model requests. For instance, if an AI model needs to retrieve data, it doesn't need to know how to query a database. Instead, it requests the data it needs, and Semantic Kernel executes the corresponding described code.

  2. Dynamic Orchestration: The system can dynamically orchestrate complex workflows involving multiple steps and different pieces of code based on its understanding. This orchestration is guided by the semantic descriptions of capabilities, making it possible to adapt to various tasks without hardcoded integrations.

  3. Enhanced Interoperability: Semantic understanding enhances the interoperability between disparate systems and AI models. By understanding the semantics of different pieces of code, Semantic Kernel can bridge the gap between them, enabling them to work together seamlessly.

  4. Simplifying AI Integration: Developers can integrate sophisticated AI functionalities into their applications without deep knowledge of AI model internals. They focus on describing what their code does, and Semantic Kernel handles the rest, making AI integration accessible to a broader range of developers.

  5. Facilitating Responsible AI Usage: With a deeper understanding of what code does, Semantic Kernel can help ensure that AI models are used responsibly. It can prevent certain actions based on context or user preferences, aligning AI behavior with ethical guidelines and user expectations.

But let's explore all that with a common scenario, let's illustrate how Semantic Kernel utilizes semantic understanding through a simplified example, focusing on an AI-powered application that automates customer support by categorizing and responding to user queries.

Example: AI-Powered Customer Support

Step 1: Decorating code

Imagine we have a web application that receives various customer support queries. Some queries are about technical issues ("I'm having trouble logging in"), while others are about billing ("I was overcharged this month"). We want to use Semantic Kernel to automatically categorize these queries and provide a standardized response based on the category. To solve this, lets assume we already have the following two objects that act as solution entry points for the two different request types.

public class HandleTechnicalIssuePlugin
 {
     // Handles technical support queries
     public string HandleTechnicalIssue(string query)
@@ -79,4 +79,4 @@
         }
     }
 }
-

Conclusion

In summary, it appears that the programming language of the future might closely resemble English. By providing a bridge between traditional coding practices and AI models, Semantic Kernel simplifies the process of implementing AI-driven solutions and opens new avenues for innovation. Through semantic understanding, developers are empowered to describe the capabilities of their code in a manner that AI can comprehend. This understanding enables seamless interactions between complex algorithms and existing software architectures, fostering a more intuitive development environment.

Resources

  1. Microsoft Docs
  2. GitHub Repository for Semantic Kernel
  3. Semantic Kernel Starters
  4. Tutorial: ChatGPT + Enterprise data with Semantic Kernel, OpenAI and Azure Cognitive Search
  5. Using Semantic Kernel in C#
  6. Microsoft.SemanticKernel Namespace
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Conclusion

In summary, it appears that the programming language of the future might closely resemble English. By providing a bridge between traditional coding practices and AI models, Semantic Kernel simplifies the process of implementing AI-driven solutions and opens new avenues for innovation. Through semantic understanding, developers are empowered to describe the capabilities of their code in a manner that AI can comprehend. This understanding enables seamless interactions between complex algorithms and existing software architectures, fostering a more intuitive development environment.

Resources

  1. Microsoft Docs
  2. GitHub Repository for Semantic Kernel
  3. Semantic Kernel Starters
  4. Tutorial: ChatGPT + Enterprise data with Semantic Kernel, OpenAI and Azure Cognitive Search
  5. Using Semantic Kernel in C#
  6. Microsoft.SemanticKernel Namespace
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/asp-net-mvc-5-authorization-by-default-your-web-app.html b/_output/asp-net-mvc-5-authorization-by-default-your-web-app.html index 4b14478a0..d7216ca1a 100644 --- a/_output/asp-net-mvc-5-authorization-by-default-your-web-app.html +++ b/_output/asp-net-mvc-5-authorization-by-default-your-web-app.html @@ -1,5 +1,5 @@ -ASP.NET MVC 5: “Authorization” by default for your web app

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: “Authorization” by default for your web app

by George Kosmidis / Published 10 years and 6 months ago, modified 3 years ago

Securing your MVC app is a tricky business! Although security is a huge topic, one of the problems that you might encounter is that unauthenticated users are allowed by default to execute every action in your web app. This behaviour is potentially unsafe because you have to remember to decorate your actions with the authorize attribute each and every time, and humans are of course prone to errors!

This is why, I would suggest, authentication to be enforced by default, or differently [Authorize] attribute should be added behind the scenes to every action.

Thankfully, you can use global filters to do that!
Open App_Start folder, double click on FilterConfig.cs and add as a global filter the AuthorizeAttribute() like this:

using System.Web;
+ASP.NET MVC 5: “Authorization” by default for your web app

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: “Authorization” by default for your web app

by George Kosmidis / Published 10 years and 6 months ago, modified 3 years ago

Securing your MVC app is a tricky business! Although security is a huge topic, one of the problems that you might encounter is that unauthenticated users are allowed by default to execute every action in your web app. This behaviour is potentially unsafe because you have to remember to decorate your actions with the authorize attribute each and every time, and humans are of course prone to errors!

This is why, I would suggest, authentication to be enforced by default, or differently [Authorize] attribute should be added behind the scenes to every action.

Thankfully, you can use global filters to do that!
Open App_Start folder, double click on FilterConfig.cs and add as a global filter the AuthorizeAttribute() like this:

using System.Web;
 using System.Web.Mvc;
 
 namespace MyNewProject {
@@ -12,4 +12,4 @@
 }

This way, every controller and action needs authorization before executing its code. The only thing you have to remember, is to allow access wherever you want (e.g. login actio ) using the AllowAnonymous attribute:

[AllowAnonymous]
 public ActionResult Login() {
     return View();
-}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/asp-net-mvc-5-custom-authentication-with-onactionexecuting.html b/_output/asp-net-mvc-5-custom-authentication-with-onactionexecuting.html index ad710d0c5..246d4ac28 100644 --- a/_output/asp-net-mvc-5-custom-authentication-with-onactionexecuting.html +++ b/_output/asp-net-mvc-5-custom-authentication-with-onactionexecuting.html @@ -1,8 +1,8 @@ ASP.NET MVC 5: Custom authentication with OnActionExecuting

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: Custom authentication with OnActionExecuting

by George Kosmidis / Published 10 years ago, modified 5 years and 2 months ago

Although I prefer the AuthorizeAttribute approach, there is another simpler way with a base Controller and OnActionExecuting:

Let’s assume the following Controller:

public class MemberController : Controller {
+ Let’s assume the following Controller:">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: Custom authentication with OnActionExecuting

by George Kosmidis / Published 10 years ago, modified 5 years and 2 months ago

Although I prefer the AuthorizeAttribute approach, there is another simpler way with a base Controller and OnActionExecuting:

Let’s assume the following Controller:

public class MemberController : Controller {
     public ActionResult Index() {
        //Stuff for members only
     }
@@ -43,4 +43,4 @@
     public ActionResult FreeAction() {
        //Stuff for everybody
     }
-}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/asp-net-mvc-5-with-razor-kendo-ui-dynamic-grid-creation-columns-ordering-grouping-and-paging.html b/_output/asp-net-mvc-5-with-razor-kendo-ui-dynamic-grid-creation-columns-ordering-grouping-and-paging.html index ab982bf70..3585dae15 100644 --- a/_output/asp-net-mvc-5-with-razor-kendo-ui-dynamic-grid-creation-columns-ordering-grouping-and-paging.html +++ b/_output/asp-net-mvc-5-with-razor-kendo-ui-dynamic-grid-creation-columns-ordering-grouping-and-paging.html @@ -1,8 +1,8 @@ ASP.NET MVC 5 with Razor Kendo UI: Dynamic Grid Creation – Columns, Ordering, Grouping and Paging

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5 with Razor Kendo UI: Dynamic Grid Creation – Columns, Ordering, Grouping and Paging

by George Kosmidis / Published 10 years ago, modified 4 years and 3 months ago

The requirements were simple! A grid that will load a whatever query, grouped by whatever columns, with filters enabled, paging and everything. Easy task with ASP.NET Telerik grids but not easy at all with Kendo UI!

Since we can’t have a ViewModel or Model for the grid (we don’t know what columns a whatever query has!), I came up with a rather different ViewModel that holds descriptions for columns, groups etc…:

public class WhatEverQueryModel {
+ Since we can’t have a ViewModel or Model for the grid (we don’t know what columns a whatever query has!), I came up with a rather different ViewModel that holds descriptions for columns, groups etc…:">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5 with Razor Kendo UI: Dynamic Grid Creation – Columns, Ordering, Grouping and Paging

by George Kosmidis / Published 10 years ago, modified 4 years and 3 months ago

The requirements were simple! A grid that will load a whatever query, grouped by whatever columns, with filters enabled, paging and everything. Easy task with ASP.NET Telerik grids but not easy at all with Kendo UI!

Since we can’t have a ViewModel or Model for the grid (we don’t know what columns a whatever query has!), I came up with a rather different ViewModel that holds descriptions for columns, groups etc…:

public class WhatEverQueryModel {
     public DataTable Data { get; set; }
     public List Groups { get; set; }
     public Dictionary Bind { get; set; }
@@ -61,4 +61,4 @@
         .PageSizes( true )
         .ButtonCount( 5 )
     )
-)

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +)

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/azure-app-service-plan-flowchart.html b/_output/azure-app-service-plan-flowchart.html index 64913e07d..94c16c0f2 100644 --- a/_output/azure-app-service-plan-flowchart.html +++ b/_output/azure-app-service-plan-flowchart.html @@ -1,2 +1,2 @@ -Choose The Right Azure Service Plan (with a flowchart)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Choose The Right Azure Service Plan (with a flowchart)

by George Kosmidis / Published a few seconds ago
Choose The Right Azure Service Plan (with a flowchart)

The Right Azure Service Plan

Selecting the right Azure Service Plan is crucial for optimizing performance, cost, and scalability. Whether you're a startup experimenting with cloud services or an enterprise seeking robust solutions, Azure offers a variety of service plans to meet your needs. This guide will help you navigate through the Free, Basic, Standard, Premium, and Isolated tiers, ensuring you make an informed decision.

The Service Plan Flowchart

Follow the arrows on the flowchart below to find your appropriate tier, and then dive into your tier details to select your plan!

Azure Service Plan Image

Dive into your tier details!

Azure App Service Plans determine the resources and features available for your applications. Each tier offers different levels of CPU, RAM, storage, and additional features. Here's a breakdown of what each tier offers:

1. Free Tier

The Free Tier is perfect for small applications and experimentation. It provides:

| Plan | CPU | RAM | Storage | |------|----------------------------------|------|-------- | | Free | Shared (60 CPU minutes per day) | 1 GB | 1 GB |

This tier is ideal for developers who want to test applications without incurring costs. However, it comes with limitations in terms of performance and features.

2. Basic Tier

The Basic Tier offers more resources and is suitable for small production workloads:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | B1 | 1 Core | 1.75 GB| 10 GB Storage | | B2 | 2 Cores | 3.5 GB | 10 GB Storage | | B3 | 4 Cores | 7 GB | 10 GB Storage |

This tier is designed for applications that require more consistent performance than the Free Tier but do not need advanced features.

3. Standard Tier

The Standard Tier is a great choice for production workloads that require load balancing and auto-scaling:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | S1 | 1 Core | 1.75 GB| 50 GB Storage | | S2 | 2 Cores | 3.5 GB | 50 GB Storage | | S3 | 4 Cores | 7 GB | 50 GB Storage |

With support for custom domains, SSL, and daily backups, this tier is ideal for business applications that need reliability and scalability.

4. Premium Tier

The Premium Tier is tailored for high-traffic applications requiring enhanced performance and advanced features:

| Plan | CPU | RAM | Storage | |------|---------|--------|-----------------| | P1 | 1 Core | 3.5 GB | 250 GB Storage | | P2 | 2 Cores | 7 GB | 250 GB Storage | | P3 | 4 Cores | 14 GB | 250 GB Storage |

This tier offers increased scalability, memory, and storage, making it suitable for large-scale applications with high availability needs.

5. Isolated Tier

The Isolated Tier is designed for applications that need to run in a private, dedicated environment:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | I1 | 2 Cores | 8 GB | 1 TB Storage | | I2 | 4 Cores | 16 GB | 1 TB Storage | | I3 | 8 Cores | 32 GB | 1 TB Storage |

This tier provides the highest level of isolation and security, ideal for mission-critical applications that require compliance and data sovereignty.

Making the Decision

When choosing a plan, consider the following factors:

  • Budget: Determine how much you are willing to spend. The Free Tier is cost-effective for testing, while the Isolated Tier offers premium features at a higher cost.
  • Performance Needs: Evaluate the CPU and RAM requirements of your applications. Higher tiers offer more resources and better performance.
  • Scalability: Consider whether your application needs to handle variable loads. The Standard and Premium tiers support auto-scaling.
  • Security and Compliance: If your application requires strict data security and compliance, the Isolated Tier is the best choice.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Choose The Right Azure Service Plan (with a flowchart)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Choose The Right Azure Service Plan (with a flowchart)

by George Kosmidis / Published a few seconds ago
Choose The Right Azure Service Plan (with a flowchart)

The Right Azure Service Plan

Selecting the right Azure Service Plan is crucial for optimizing performance, cost, and scalability. Whether you're a startup experimenting with cloud services or an enterprise seeking robust solutions, Azure offers a variety of service plans to meet your needs. This guide will help you navigate through the Free, Basic, Standard, Premium, and Isolated tiers, ensuring you make an informed decision.

The Service Plan Flowchart

Follow the arrows on the flowchart below to find your appropriate tier, and then dive into your tier details to select your plan!

Azure Service Plan Image

Dive into your tier details!

Azure App Service Plans determine the resources and features available for your applications. Each tier offers different levels of CPU, RAM, storage, and additional features. Here's a breakdown of what each tier offers:

1. Free Tier

The Free Tier is perfect for small applications and experimentation. It provides:

| Plan | CPU | RAM | Storage | |------|----------------------------------|------|-------- | | Free | Shared (60 CPU minutes per day) | 1 GB | 1 GB |

This tier is ideal for developers who want to test applications without incurring costs. However, it comes with limitations in terms of performance and features.

2. Basic Tier

The Basic Tier offers more resources and is suitable for small production workloads:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | B1 | 1 Core | 1.75 GB| 10 GB Storage | | B2 | 2 Cores | 3.5 GB | 10 GB Storage | | B3 | 4 Cores | 7 GB | 10 GB Storage |

This tier is designed for applications that require more consistent performance than the Free Tier but do not need advanced features.

3. Standard Tier

The Standard Tier is a great choice for production workloads that require load balancing and auto-scaling:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | S1 | 1 Core | 1.75 GB| 50 GB Storage | | S2 | 2 Cores | 3.5 GB | 50 GB Storage | | S3 | 4 Cores | 7 GB | 50 GB Storage |

With support for custom domains, SSL, and daily backups, this tier is ideal for business applications that need reliability and scalability.

4. Premium Tier

The Premium Tier is tailored for high-traffic applications requiring enhanced performance and advanced features:

| Plan | CPU | RAM | Storage | |------|---------|--------|-----------------| | P1 | 1 Core | 3.5 GB | 250 GB Storage | | P2 | 2 Cores | 7 GB | 250 GB Storage | | P3 | 4 Cores | 14 GB | 250 GB Storage |

This tier offers increased scalability, memory, and storage, making it suitable for large-scale applications with high availability needs.

5. Isolated Tier

The Isolated Tier is designed for applications that need to run in a private, dedicated environment:

| Plan | CPU | RAM | Storage | |------|---------|--------|----------------| | I1 | 2 Cores | 8 GB | 1 TB Storage | | I2 | 4 Cores | 16 GB | 1 TB Storage | | I3 | 8 Cores | 32 GB | 1 TB Storage |

This tier provides the highest level of isolation and security, ideal for mission-critical applications that require compliance and data sovereignty.

Making the Decision

When choosing a plan, consider the following factors:

  • Budget: Determine how much you are willing to spend. The Free Tier is cost-effective for testing, while the Isolated Tier offers premium features at a higher cost.
  • Performance Needs: Evaluate the CPU and RAM requirements of your applications. Higher tiers offer more resources and better performance.
  • Scalability: Consider whether your application needs to handle variable loads. The Standard and Premium tiers support auto-scaling.
  • Security and Compliance: If your application requires strict data security and compliance, the Isolated Tier is the best choice.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/azure-architecture-icons.html b/_output/azure-architecture-icons.html index 46b5c55b7..30f8d8a0d 100644 --- a/_output/azure-architecture-icons.html +++ b/_output/azure-architecture-icons.html @@ -1,2 +1,2 @@ -Azure Architecture Icons

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Azure Architecture Icons

On this page, you will find a helpful resource for accessing every Azure Icon in SVG and PNG format in various sizes. This is an invaluable tool for creating Azure Architectural diagrams using online services like draw.io and miro.com, as well as desktop applications like Visio. To use the webpage, simply visit the page, use CTRL+F to search for the desired icon by name, or scroll through the options to find the desired icon. This is a must-have resource for anyone working with Azure Architectural Diagrams.

Click to add the icons as a diagrams.net library (former draw.io)

Icon terms!
Microsoft permits the use of these icons in architectural diagrams, training materials, or documentation. You may copy, distribute, and display the icons only for the permitted use unless granted explicit permission by Microsoft. Microsoft reserves all other rights.

You can always find the original distribution of SVG Icons here: Azure Architecture Icons

AI & Machine Learning

Azure Architecture Icons /  AI & Machine Learning / Batch AI
Batch AI
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio (Classic) Web Services
Machine Learning Studio (Classic) Web Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Genomics
Genomics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Computer Vision
Computer Vision
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Custom Vision
Custom Vision
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Face Apis
Face Apis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Content Moderators
Content Moderators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Personalizers
Personalizers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Speech Services
Speech Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Qna Makers
Qna Makers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Translator Text
Translator Text
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Language Understanding
Language Understanding
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Immersive Readers
Immersive Readers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Anomaly Detector
Anomaly Detector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Form Recognizers
Form Recognizers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Experimentation Studio
Azure Experimentation Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Object Understanding
Azure Object Understanding
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Metrics Advisor
Metrics Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Applied AI Services
Azure Applied AI Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Language
Language
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Services Decisions
Cognitive Services Decisions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Serverless Search
Serverless Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Bonsai
Bonsai
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Openai
Azure Openai
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / AI Studio
AI Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Services
Cognitive Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Genomics Accounts
Genomics Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Bot Services
Bot Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning
Machine Learning
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio Workspaces
Machine Learning Studio Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio Web Service Plans
Machine Learning Studio Web Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Analytics

Azure Architecture Icons / Analytics / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Event Hubs
Event Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Stream Analytics Jobs
Stream Analytics Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Endpoint Analytics
Endpoint Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Synapse Analytics
Azure Synapse Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Workbooks
Azure Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Private Link Services
Private Link Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Power BI Embedded
Power BI Embedded
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / HD Insight Clusters
HD Insight Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Lake Analytics
Data Lake Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Data Explorer Clusters
Azure Data Explorer Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Analysis Services
Analysis Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Event Hub Clusters
Event Hub Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Lake Store Gen1
Data Lake Store Gen1
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Databricks
Azure Databricks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

App Services

Azure Architecture Icons / App Services / App Service Plans
App Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Certificates
App Service Certificates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Domains
App Service Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / CDN Profiles
CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Environments
App Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Azure Ecosystem

Azure Architecture Icons / Azure Ecosystem / Collaborative Service
Collaborative Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Ecosystem / Applens
Applens
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Ecosystem / Azure Hybrid Center
Azure Hybrid Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Azure Stack

Azure Architecture Icons / Azure Stack / Multi Tenancy
Multi Tenancy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Infrastructure Backup
Infrastructure Backup
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Capacity
Capacity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Offers
Offers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / User Subscriptions
User Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Plans
Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Updates
Updates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Blockchain

Azure Architecture Icons / Blockchain / Blockchain Applications
Blockchain Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Outbound Connection
Outbound Connection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Azure Blockchain Service
Azure Blockchain Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Azure Token Service
Azure Token Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / ABS Member
ABS Member
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Consortium
Consortium
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Compute

Azure Architecture Icons / Compute / Maintenance Configuration
Maintenance Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Host Pools
Host Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Application Group
Application Group
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Workspaces
Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disk Encryption Sets
Disk Encryption Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Workspaces
Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Automanaged VM
Automanaged VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Managed Service Fabric
Managed Service Fabric
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Metrics Advisor
Metrics Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Templates
Image Templates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Restore Points
Restore Points
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Restore Points Collections
Restore Points Collections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Azure Compute Galleries
Azure Compute Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Virtual Machine
Virtual Machine
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Kubernetes Services
Kubernetes Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Mesh Applications
Mesh Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Availability Sets
Availability Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks Snapshots
Disks Snapshots
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / OS Images (Classic)
OS Images (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Virtual Machines (Classic)
Virtual Machines (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Function Apps
Function Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Cloud Services (Classic)
Cloud Services (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Batch Accounts
Batch Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks
Disks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Images
Images
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / VM Scale Sets
VM Scale Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Service Fabric Clusters
Service Fabric Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Definitions
Image Definitions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Versions
Image Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Shared Image Galleries
Shared Image Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / VM Images (Classic)
VM Images (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks (Classic)
Disks (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Container Services (Deprecated)
Container Services (Deprecated)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Container Instances
Container Instances
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Host Groups
Host Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Hosts
Hosts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Azure Spring Apps
Azure Spring Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Containers

Azure Architecture Icons / Containers / Azure Red Hat Openshift
Azure Red Hat Openshift
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Kubernetes Services
Kubernetes Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Batch Accounts
Batch Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Service Fabric Clusters
Service Fabric Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Container Instances
Container Instances
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Container Registries
Container Registries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Databases

Azure Architecture Icons / Databases / SQL Data Warehouses
SQL Data Warehouses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Synapse Analytics
Azure Synapse Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL
Azure SQL
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SSIS Lift And Shift IR
SSIS Lift And Shift IR
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Purview Accounts
Azure Purview Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL Edge
Azure SQL Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Postgresql Server Group
Azure Database Postgresql Server Group
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Oracle Database
Oracle Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Cosmos DB
Azure Cosmos DB
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Mysql Server
Azure Database Mysql Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Mariadb Server
Azure Database Mariadb Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL VM
Azure SQL VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Virtual Clusters
Virtual Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Elastic Job Agents
Elastic Job Agents
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Database
SQL Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Postgresql Server
Azure Database Postgresql Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Server
SQL Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Migration Services
Azure Database Migration Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Elastic Pools
SQL Elastic Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Managed Database
Managed Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Managed Instance
SQL Managed Instance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL Server Stretch Databases
Azure SQL Server Stretch Databases
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Cache Redis
Cache Redis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Instance Pools
Instance Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Data Explorer Clusters
Azure Data Explorer Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Server Registries
SQL Server Registries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Devops

Azure Architecture Icons / Devops / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Change Analysis
Change Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Cloudtest
Cloudtest
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Load Testing
Load Testing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Lab Accounts
Lab Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Devops Starter
Devops Starter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Code Optimization
Code Optimization
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Azure Devops
Azure Devops
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Devtest Labs
Devtest Labs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Lab Services
Lab Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

General

Azure Architecture Icons / General / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Preview Features
Preview Features
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / All Resources
All Resources
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Subscriptions
Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Reservations
Reservations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Service Health
Service Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Information
Information
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Recent
Recent
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Groups
Resource Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Marketplace
Marketplace
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Templates
Templates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Quickstart Center
Quickstart Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Management Groups
Management Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Help And Support
Help And Support
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Tag
Tag
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Dashboard
Dashboard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Free Services
Free Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Management
Cost Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Marketplace Management
Marketplace Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Region Management
Region Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Troubleshoot
Troubleshoot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Explorer
Resource Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Biz Talk
Biz Talk
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Blob Block
Blob Block
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Blob Page
Blob Page
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Branch
Branch
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Browser
Browser
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Bug
Bug
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Builds
Builds
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cache
Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Code
Code
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Commit
Commit
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Controls
Controls
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Controls Horizontal
Controls Horizontal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Alerts
Cost Alerts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Analysis
Cost Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Budgets
Cost Budgets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Counter
Counter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cubes
Cubes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Dev Console
Dev Console
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Download
Download
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Error
Error
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Extensions
Extensions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / File
File
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Files
Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Folder Blank
Folder Blank
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Folder Website
Folder Website
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / FTP
FTP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Gear
Gear
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Error
Globe Error
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Success
Globe Success
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Warning
Globe Warning
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Guide
Guide
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Heart
Heart
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Image
Image
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Input Output
Input Output
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Journey Hub
Journey Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Launch Portal
Launch Portal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Learn
Learn
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Load Test
Load Test
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Location
Location
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Log Streaming
Log Streaming
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Management Portal
Management Portal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Media File
Media File
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Mobile
Mobile
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Mobile Engagement
Mobile Engagement
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Power
Power
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Powershell
Powershell
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Power Up
Power Up
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Feature Previews
Feature Previews
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Process Explorer
Process Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Production Ready Database
Production Ready Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Group List
Resource Group List
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Linked
Resource Linked
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Scheduler
Scheduler
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Search
Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Server Farm
Server Farm
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / SSD
SSD
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Azure Files
Storage Azure Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Container
Storage Container
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Queue
Storage Queue
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Table
Table
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Tags
Tags
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / TFS VC Repository
TFS VC Repository
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Toolbox
Toolbox
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Versions
Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Website Power
Website Power
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Website Staging
Website Staging
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Web Slots
Web Slots
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Web Test
Web Test
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Workbooks
Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Workflow
Workflow
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Backlog
Backlog
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Media
Media
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Module
Module
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Search Grid
Search Grid
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Hybrid & Multicloud

Azure Architecture Icons / Hybrid & Multicloud / Azure Operator 5G Core
Azure Operator 5G Core
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Nexus
Azure Operator Nexus
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Insights
Azure Operator Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Service Manager
Azure Operator Service Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Programmable Connectivity
Azure Programmable Connectivity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Identity

Azure Architecture Icons / Identity / Security
Security
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Administrative Units
Administrative Units
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Verifiable Credentials
Verifiable Credentials
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Privleged Identity Management
Azure AD Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Privleged Identity Management
Entra Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / API Proxy
API Proxy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Tenant Properties
Tenant Properties
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Custom Azure AD Roles
Custom Azure AD Roles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / AAD Licenses
AAD Licenses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Connect
Entra Connect
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Verified ID
Entra Verified ID
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Global Secure Access
Global Secure Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / External Identities
External Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Private Access
Private Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Internet Access
Internet Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure Active Directory
Azure Active Directory
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Domain Services
Azure AD Domain Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Domain Services
Entra Domain Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Groups
Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Active Directory Connect Health
Active Directory Connect Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Enterprise Applications
Enterprise Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Managed Identities
Entra Managed Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Managed Identities
Managed Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD B2C
Azure AD B2C
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure Information Protection
Azure Information Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Users
Users
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Identity Protection
Azure AD Identity Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra ID Protection
Entra ID Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / App Registrations
App Registrations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Privilege Identity Management
Azure AD Privilege Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Identity Governance
Identity Governance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Roles And Administrators
Azure AD Roles And Administrators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / User Settings
User Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Integration

Azure Architecture Icons / Integration / SQL Data Warehouses
SQL Data Warehouses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Service Environments
Integration Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Topic
Partner Topic
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / System Topic
System Topic
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Registration
Partner Registration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Namespace
Partner Namespace
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Logic Apps
Logic Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Environments
Integration Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Storsimple Device Managers
Storsimple Device Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure SQL Server Stretch Databases
Azure SQL Server Stretch Databases
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Topics
Event Grid Topics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Relays
Relays
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure API For FHIR
Azure API For FHIR
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Software As A Service
Software As A Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Domains
Event Grid Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Data Catalog
Azure Data Catalog
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Accounts
Integration Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / App Configuration
App Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Sendgrid Accounts
Sendgrid Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Subscriptions
Event Grid Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Logic Apps Custom Connector
Logic Apps Custom Connector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Service Bus
Azure Service Bus
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Intune

Azure Architecture Icons / Intune / Device Security Apple
Device Security Apple
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Security Google
Device Security Google
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Security Windows
Device Security Windows
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune
Intune
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Ebooks
Ebooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Client Apps
Client Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Devices
Devices
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Compliance
Device Compliance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Software Updates
Software Updates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Security Baselines
Security Baselines
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Enrollment
Device Enrollment
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Configuration
Device Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Exchange Access
Exchange Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Azure AD Roles And Administrators
Azure AD Roles And Administrators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Tenant Status
Tenant Status
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune For Education
Intune For Education
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune App Protection
Intune App Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Mindaro
Mindaro
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

IoT

Azure Architecture Icons /  IoT  / Machine Learning Studio (Classic) Web Services
Machine Learning Studio (Classic) Web Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Hubs
Event Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Stream Analytics Jobs
Stream Analytics Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Digital Twins
Digital Twins
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Industrial Iot
Industrial Iot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Logic Apps
Logic Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Stack HCI Premium
Stack HCI Premium
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Iot Operations
Azure Iot Operations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Function Apps
Function Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Notification Hub Namespaces
Notification Hub Namespaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Stack
Azure Stack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Cosmos DB
Azure Cosmos DB
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Hub Clusters
Event Hub Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Machine Learning Studio Workspaces
Machine Learning Studio Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Machine Learning Studio Web Service Plans
Machine Learning Studio Web Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Environments
Time Series Insights Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Hub
Iot Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Central Applications
Iot Central Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Maps Accounts
Azure Maps Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Edge
Iot Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Event Sources
Time Series Insights Event Sources
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Access Policies
Time Series Insights Access Policies
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Data Sets
Time Series Data Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Windows10 Core Services
Windows10 Core Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Grid Subscriptions
Event Grid Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Device Provisioning Services
Device Provisioning Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Management & Governance

Azure Architecture Icons / Management & Governance / Monitor
Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Alerts
Alerts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Advisor
Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Blueprints
Blueprints
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Activity Log
Activity Log
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Diagnostics Settings
Diagnostics Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Scheduler Job Collections
Scheduler Job Collections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Compliance
Compliance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / My Customers
My Customers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Metrics
Metrics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Solutions
Solutions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Automation Accounts
Automation Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Operation Log (Classic)
Operation Log (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Service Providers
Service Providers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Education
Education
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Service Catalog MAD
Service Catalog MAD
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Intune Trends
Intune Trends
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Azure Lighthouse
Azure Lighthouse
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Universal Print
Universal Print
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Azure Arc
Azure Arc
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Arc Machines
Arc Machines
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Resources Provider
Resources Provider
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / User Privacy
User Privacy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Managed Desktop
Managed Desktop
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Managed Applications Center
Managed Applications Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Customer Lockbox For Microsoft Azure
Customer Lockbox For Microsoft Azure
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Policy
Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Resource Graph Explorer
Resource Graph Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Machinesazurearc
Machinesazurearc
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Menu

Azure Architecture Icons / Menu / Keys
Keys
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Migrate

Azure Architecture Icons / Migrate / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Data Box
Data Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Migrate
Azure Migrate
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Migration

Azure Architecture Icons / Migration / Azure Database Migration Services
Azure Database Migration Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Mixed Reality

Azure Architecture Icons / Mixed Reality / Remote Rendering
Remote Rendering
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mixed Reality / Spatial Anchor Accounts
Spatial Anchor Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Mobile

Azure Architecture Icons / Mobile / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mobile / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mobile / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Monitor

Azure Architecture Icons / Monitor / Monitor
Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Activity Log
Activity Log
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Diagnostics Settings
Diagnostics Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Metrics
Metrics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Azure Monitors For SAP Solutions
Azure Monitors For SAP Solutions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Change Analysis
Change Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Azure Workbooks
Azure Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Network Watcher
Network Watcher
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Auto Scale
Auto Scale
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Networking

Azure Architecture Icons / Networking / CDN Profiles
CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Firewall Manager
Azure Firewall Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Firewall Policy
Azure Firewall Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link
Private Link
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / IP Groups
IP Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual WAN Hub
Virtual WAN Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link Service
Private Link Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Resource Management Private Link
Resource Management Private Link
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link Services
Private Link Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Load Balancer Hub
Load Balancer Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Bastions
Bastions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Router
Virtual Router
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Connected Cache
Connected Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Spot VMSS
Spot VMSS
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Spot VM
Spot VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Subnet
Subnet
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Private Resolver
DNS Private Resolver
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Communications Gateway
Azure Communications Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Traffic Controller
Traffic Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Security Policy
DNS Security Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Multistack
DNS Multistack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / ATM Multistack
ATM Multistack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / IP Address Manager
IP Address Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Networks
Virtual Networks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Load Balancers
Load Balancers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Network Gateways
Virtual Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Zones
DNS Zones
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Traffic Manager Profiles
Traffic Manager Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Watcher
Network Watcher
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Security Groups
Network Security Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Addresses (Classic)
Public IP Addresses (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Addresses
Public IP Addresses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / On Premises Data Gateways
On Premises Data Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Route Filters
Route Filters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Ddos Protection Plans
Ddos Protection Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Front Door And CDN Profiles
Front Door And CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Networks (Classic)
Virtual Networks (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Application Gateways
Application Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Local Network Gateways
Local Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Expressroute Circuits
Expressroute Circuits
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Interfaces
Network Interfaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Connections
Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Route Tables
Route Tables
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Firewalls
Firewalls
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Service Endpoint Policies
Service Endpoint Policies
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / NAT
NAT
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Wans
Virtual Wans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Web Application Firewall Policies(WAF)
Web Application Firewall Policies(WAF)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Proximity Placement Groups
Proximity Placement Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Reserved IP Addresses (Classic)
Reserved IP Addresses (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Prefixes
Public IP Prefixes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

New Icons

Azure Architecture Icons / New Icons / Connected Vehicle Platform
Connected Vehicle Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Azure Sustainability
Azure Sustainability
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Icm Troubleshooting
Icm Troubleshooting
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Osconfig
Osconfig
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Storage Actions
Storage Actions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Entra Connect Sync
Entra Connect Sync
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Entra Connect Health
Entra Connect Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Other

Azure Architecture Icons / Other / Azure Virtual Desktop
Azure Virtual Desktop
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / SSH Keys
SSH Keys
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Internet Analyzer Profiles
Internet Analyzer Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Cloud Shell
Azure Cloud Shell
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Video Analyzers
Video Analyzers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Expressroute Direct
Expressroute Direct
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Cost Export
Cost Export
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Communication Services
Azure Communication Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Peering Service
Peering Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Network Function Manager Functions
Azure Network Function Manager Functions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Log Analytics Query Pack
Log Analytics Query Pack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Kubernetes
Arc Kubernetes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Vmware Solution
Azure Vmware Solution
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Peerings
Peerings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Dashboard Hub
Dashboard Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Video Indexer
Azure Video Indexer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AVS VM
AVS VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Postgresql
Arc Postgresql
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc SQL Managed Instance
Arc SQL Managed Instance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc SQL Server
Arc SQL Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Data Collection Rules
Data Collection Rules
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Resource Mover
Resource Mover
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Chaos Studio
Azure Chaos Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Network Managers
Network Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Dedicated HSM
Dedicated HSM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Modular Data Center
Modular Data Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Template Specs
Template Specs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Data Services
Arc Data Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Backup Center
Azure Backup Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Backup Vault
Backup Vault
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Device Update Iot Hub
Device Update Iot Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Fiji
Fiji
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Monitor Dashboard
Azure Monitor Dashboard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / SCVMM Management Servers
SCVMM Management Servers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Cloud Services (Extended Support)
Cloud Services (Extended Support)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Support Center Blue
Azure Support Center Blue
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Web App & Database
Web App & Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure HPC Workbenches
Azure HPC Workbenches
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Disk Pool
Disk Pool
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Bare Metal Infrastructure
Bare Metal Infrastructure
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Private Endpoints
Private Endpoints
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Open Supply Chain Platform
Open Supply Chain Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Aquila
Aquila
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Reserved Capacity
Reserved Capacity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Custom IP Prefix
Custom IP Prefix
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / FHIR Service
FHIR Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Medtech Service
Medtech Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Managed Instance Apache Cassandra
Managed Instance Apache Cassandra
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Confidential Ledgers
Confidential Ledgers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AAD Licenses
AAD Licenses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Test Base
Test Base
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Orbital
Azure Orbital
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Capacity Reservation Groups
Capacity Reservation Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Windows Notification Services
Windows Notification Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Network Function Manager
Azure Network Function Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Mission Landing Zone
Mission Landing Zone
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Mobile Networks
Mobile Networks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM App Definitions
VM App Definitions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM App Versions
VM App Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Edge Hardware Center
Azure Edge Hardware Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Resource Guard
Resource Guard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Ceres
Ceres
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azurite
Azurite
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Update Management Center
Update Management Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Compute Galleries
Azure Compute Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Community Images
Community Images
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM Image Version
VM Image Version
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Savings Plans
Savings Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Worker Container App
Worker Container App
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Managed Grafana
Azure Managed Grafana
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Targets Management
Targets Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Storage Functions
Storage Functions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Sonic Dash
Sonic Dash
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Compliance Center
Compliance Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Network Security Perimeters
Network Security Perimeters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Load Testing
Azure Load Testing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Visits Builder
Virtual Visits Builder
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Quotas
Azure Quotas
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Container Apps Environments
Container Apps Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / App Compliance Automation
App Compliance Automation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Instance For SAP
Virtual Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Center For SAP
Azure Center For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Storage Mover
Azure Storage Mover
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Central Service Instance For SAP
Central Service Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Kubernetes Fleet Manager
Kubernetes Fleet Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Express Route Traffic Collector
Express Route Traffic Collector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Database Instance For SAP
Database Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Elastic SAN
Elastic SAN
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Microsoft Dev Box
Microsoft Dev Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Deployment Environments
Azure Deployment Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Dev Tunnels
Azure Dev Tunnels
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Enclaves
Virtual Enclaves
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AKS Istio
AKS Istio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender CM Local Manager
Defender CM Local Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender External Management
Defender External Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Freezer Monitor
Defender Freezer Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Historian
Defender Historian
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender HMI
Defender HMI
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Marquee
Defender Marquee
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Robot Controller
Defender Robot Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Sensor
Defender Sensor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Slot
Defender Slot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Web Guiding System
Defender Web Guiding System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender DCS Controller
Defender DCS Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Distributer Control System
Defender Distributer Control System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Engineering Station
Defender Engineering Station
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Packaging System
Defender Industrial Packaging System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Printer
Defender Industrial Printer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Scale System
Defender Industrial Scale System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Robot
Defender Industrial Robot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Meter
Defender Meter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender PLC
Defender PLC
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Pneumatic Device
Defender Pneumatic Device
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Programable Board
Defender Programable Board
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Relay
Defender Relay
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender RTU
Defender RTU
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / HDI AKS Cluster
HDI AKS Cluster
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure A
Azure A
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Local Network Gateways
Local Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Edge Management
Edge Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Instance Pools
Instance Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Sphere
Azure Sphere
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / App Registrations
App Registrations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Exchange On Premises Access
Exchange On Premises Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / WAC
WAC
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azureattestation
Azureattestation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / RTOS
RTOS
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Web Jobs
Web Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Security

Azure Architecture Icons / Security / Detonation
Detonation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender For Iot
Microsoft Defender For Iot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Privleged Identity Management
Azure AD Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender EASM
Microsoft Defender EASM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Identity Secure Score
Identity Secure Score
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Risky Signins
Azure AD Risky Signins
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Risky Users
Azure AD Risky Users
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Authentication Methods
Azure AD Authentication Methods
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Multifactor Authentication
Multifactor Authentication
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure Information Protection
Azure Information Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Identity Protection
Azure AD Identity Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Conditional Access
Conditional Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender For Cloud
Microsoft Defender For Cloud
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Application Security Groups
Application Security Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Key Vaults
Key Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure Sentinel
Azure Sentinel
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / User Settings
User Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Extendedsecurityupdates
Extendedsecurityupdates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Storage

Azure Architecture Icons / Storage / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure HCP Cache
Azure HCP Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Accounts
Storage Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Accounts (Classic)
Storage Accounts (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storsimple Device Managers
Storsimple Device Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Lake Storage Gen1
Data Lake Storage Gen1
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Explorer
Storage Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storsimple Data Managers
Storsimple Data Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Sync Services
Storage Sync Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Box
Data Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Netapp Files
Azure Netapp Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Share Invitations
Data Share Invitations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Shares
Data Shares
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Import Export Jobs
Import Export Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Fileshares
Azure Fileshares
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Web

Azure Architecture Icons / Web / App Service Plans
App Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Certificates
App Service Certificates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Domains
App Service Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Static Apps
Static Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Center
API Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Space
App Space
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Environments
App Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Signalr
Signalr
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Notification Hub Namespaces
Notification Hub Namespaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Front Door And CDN Profiles
Front Door And CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Cognitive Services
Cognitive Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Azure Media Service
Azure Media Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Azure Spring Apps
Azure Spring Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
 
\ No newline at end of file +Azure Architecture Icons

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Azure Architecture Icons

On this page, you will find a helpful resource for accessing every Azure Icon in SVG and PNG format in various sizes. This is an invaluable tool for creating Azure Architectural diagrams using online services like draw.io and miro.com, as well as desktop applications like Visio. To use the webpage, simply visit the page, use CTRL+F to search for the desired icon by name, or scroll through the options to find the desired icon. This is a must-have resource for anyone working with Azure Architectural Diagrams.

Click to add the icons as a diagrams.net library (former draw.io)

Icon terms!
Microsoft permits the use of these icons in architectural diagrams, training materials, or documentation. You may copy, distribute, and display the icons only for the permitted use unless granted explicit permission by Microsoft. Microsoft reserves all other rights.

You can always find the original distribution of SVG Icons here: Azure Architecture Icons

AI & Machine Learning

Azure Architecture Icons /  AI & Machine Learning / Batch AI
Batch AI
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio (Classic) Web Services
Machine Learning Studio (Classic) Web Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Genomics
Genomics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Computer Vision
Computer Vision
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Custom Vision
Custom Vision
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Face Apis
Face Apis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Content Moderators
Content Moderators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Personalizers
Personalizers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Speech Services
Speech Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Qna Makers
Qna Makers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Translator Text
Translator Text
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Language Understanding
Language Understanding
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Immersive Readers
Immersive Readers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Anomaly Detector
Anomaly Detector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Form Recognizers
Form Recognizers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Experimentation Studio
Azure Experimentation Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Object Understanding
Azure Object Understanding
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Metrics Advisor
Metrics Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Applied AI Services
Azure Applied AI Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Language
Language
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Services Decisions
Cognitive Services Decisions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Serverless Search
Serverless Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Bonsai
Bonsai
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Azure Openai
Azure Openai
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / AI Studio
AI Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Cognitive Services
Cognitive Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Genomics Accounts
Genomics Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Bot Services
Bot Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning
Machine Learning
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio Workspaces
Machine Learning Studio Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  AI & Machine Learning / Machine Learning Studio Web Service Plans
Machine Learning Studio Web Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Analytics

Azure Architecture Icons / Analytics / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Event Hubs
Event Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Stream Analytics Jobs
Stream Analytics Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Endpoint Analytics
Endpoint Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Synapse Analytics
Azure Synapse Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Workbooks
Azure Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Private Link Services
Private Link Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Power BI Embedded
Power BI Embedded
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / HD Insight Clusters
HD Insight Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Lake Analytics
Data Lake Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Data Explorer Clusters
Azure Data Explorer Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Analysis Services
Analysis Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Event Hub Clusters
Event Hub Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Data Lake Store Gen1
Data Lake Store Gen1
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Analytics / Azure Databricks
Azure Databricks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

App Services

Azure Architecture Icons / App Services / App Service Plans
App Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Certificates
App Service Certificates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Domains
App Service Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / CDN Profiles
CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / App Services / App Service Environments
App Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Azure Ecosystem

Azure Architecture Icons / Azure Ecosystem / Collaborative Service
Collaborative Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Ecosystem / Applens
Applens
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Ecosystem / Azure Hybrid Center
Azure Hybrid Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Azure Stack

Azure Architecture Icons / Azure Stack / Multi Tenancy
Multi Tenancy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Infrastructure Backup
Infrastructure Backup
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Capacity
Capacity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Offers
Offers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / User Subscriptions
User Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Plans
Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Azure Stack / Updates
Updates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Blockchain

Azure Architecture Icons / Blockchain / Blockchain Applications
Blockchain Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Outbound Connection
Outbound Connection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Azure Blockchain Service
Azure Blockchain Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Azure Token Service
Azure Token Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / ABS Member
ABS Member
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Blockchain / Consortium
Consortium
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Compute

Azure Architecture Icons / Compute / Maintenance Configuration
Maintenance Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Host Pools
Host Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Application Group
Application Group
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Workspaces
Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disk Encryption Sets
Disk Encryption Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Workspaces
Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Automanaged VM
Automanaged VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Managed Service Fabric
Managed Service Fabric
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Metrics Advisor
Metrics Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Templates
Image Templates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Restore Points
Restore Points
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Restore Points Collections
Restore Points Collections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Azure Compute Galleries
Azure Compute Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Virtual Machine
Virtual Machine
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Kubernetes Services
Kubernetes Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Mesh Applications
Mesh Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Availability Sets
Availability Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks Snapshots
Disks Snapshots
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / OS Images (Classic)
OS Images (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Virtual Machines (Classic)
Virtual Machines (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Function Apps
Function Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Cloud Services (Classic)
Cloud Services (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Batch Accounts
Batch Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks
Disks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Images
Images
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / VM Scale Sets
VM Scale Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Service Fabric Clusters
Service Fabric Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Definitions
Image Definitions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Image Versions
Image Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Shared Image Galleries
Shared Image Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / VM Images (Classic)
VM Images (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Disks (Classic)
Disks (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Container Services (Deprecated)
Container Services (Deprecated)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Container Instances
Container Instances
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Host Groups
Host Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Hosts
Hosts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Compute / Azure Spring Apps
Azure Spring Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Containers

Azure Architecture Icons / Containers / Azure Red Hat Openshift
Azure Red Hat Openshift
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Kubernetes Services
Kubernetes Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Batch Accounts
Batch Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Service Fabric Clusters
Service Fabric Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Container Instances
Container Instances
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Containers / Container Registries
Container Registries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Databases

Azure Architecture Icons / Databases / SQL Data Warehouses
SQL Data Warehouses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Synapse Analytics
Azure Synapse Analytics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL
Azure SQL
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SSIS Lift And Shift IR
SSIS Lift And Shift IR
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Purview Accounts
Azure Purview Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL Edge
Azure SQL Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Postgresql Server Group
Azure Database Postgresql Server Group
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Oracle Database
Oracle Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Cosmos DB
Azure Cosmos DB
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Mysql Server
Azure Database Mysql Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Mariadb Server
Azure Database Mariadb Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL VM
Azure SQL VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Virtual Clusters
Virtual Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Elastic Job Agents
Elastic Job Agents
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Database
SQL Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Postgresql Server
Azure Database Postgresql Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Server
SQL Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Database Migration Services
Azure Database Migration Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Elastic Pools
SQL Elastic Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Managed Database
Managed Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Managed Instance
SQL Managed Instance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure SQL Server Stretch Databases
Azure SQL Server Stretch Databases
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Cache Redis
Cache Redis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Instance Pools
Instance Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / Azure Data Explorer Clusters
Azure Data Explorer Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Databases / SQL Server Registries
SQL Server Registries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Devops

Azure Architecture Icons / Devops / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Change Analysis
Change Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Cloudtest
Cloudtest
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Load Testing
Load Testing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Lab Accounts
Lab Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Devops Starter
Devops Starter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Code Optimization
Code Optimization
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Azure Devops
Azure Devops
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Devtest Labs
Devtest Labs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Devops / Lab Services
Lab Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

General

Azure Architecture Icons / General / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Preview Features
Preview Features
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / All Resources
All Resources
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Subscriptions
Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Reservations
Reservations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Service Health
Service Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Information
Information
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Recent
Recent
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Groups
Resource Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Marketplace
Marketplace
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Templates
Templates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Quickstart Center
Quickstart Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Management Groups
Management Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Help And Support
Help And Support
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Tag
Tag
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Dashboard
Dashboard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Free Services
Free Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Management
Cost Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Marketplace Management
Marketplace Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Region Management
Region Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Troubleshoot
Troubleshoot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Explorer
Resource Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Biz Talk
Biz Talk
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Blob Block
Blob Block
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Blob Page
Blob Page
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Branch
Branch
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Browser
Browser
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Bug
Bug
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Builds
Builds
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cache
Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Code
Code
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Commit
Commit
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Controls
Controls
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Controls Horizontal
Controls Horizontal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Alerts
Cost Alerts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Analysis
Cost Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cost Budgets
Cost Budgets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Counter
Counter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Cubes
Cubes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Dev Console
Dev Console
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Download
Download
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Error
Error
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Extensions
Extensions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / File
File
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Files
Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Folder Blank
Folder Blank
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Folder Website
Folder Website
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / FTP
FTP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Gear
Gear
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Error
Globe Error
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Success
Globe Success
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Globe Warning
Globe Warning
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Guide
Guide
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Heart
Heart
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Image
Image
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Input Output
Input Output
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Journey Hub
Journey Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Launch Portal
Launch Portal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Learn
Learn
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Load Test
Load Test
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Location
Location
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Log Streaming
Log Streaming
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Management Portal
Management Portal
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Media File
Media File
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Mobile
Mobile
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Mobile Engagement
Mobile Engagement
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Power
Power
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Powershell
Powershell
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Power Up
Power Up
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Feature Previews
Feature Previews
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Process Explorer
Process Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Production Ready Database
Production Ready Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Group List
Resource Group List
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Resource Linked
Resource Linked
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Scheduler
Scheduler
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Search
Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Server Farm
Server Farm
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / SSD
SSD
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Azure Files
Storage Azure Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Container
Storage Container
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Storage Queue
Storage Queue
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Table
Table
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Tags
Tags
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / TFS VC Repository
TFS VC Repository
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Toolbox
Toolbox
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Versions
Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Website Power
Website Power
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Website Staging
Website Staging
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Web Slots
Web Slots
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Web Test
Web Test
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Workbooks
Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Workflow
Workflow
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Backlog
Backlog
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Media
Media
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Module
Module
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / General / Search Grid
Search Grid
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Hybrid & Multicloud

Azure Architecture Icons / Hybrid & Multicloud / Azure Operator 5G Core
Azure Operator 5G Core
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Nexus
Azure Operator Nexus
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Insights
Azure Operator Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Operator Service Manager
Azure Operator Service Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Hybrid & Multicloud / Azure Programmable Connectivity
Azure Programmable Connectivity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Identity

Azure Architecture Icons / Identity / Security
Security
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Administrative Units
Administrative Units
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Verifiable Credentials
Verifiable Credentials
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Privleged Identity Management
Azure AD Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Privleged Identity Management
Entra Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / API Proxy
API Proxy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Tenant Properties
Tenant Properties
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Custom Azure AD Roles
Custom Azure AD Roles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / AAD Licenses
AAD Licenses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Connect
Entra Connect
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Verified ID
Entra Verified ID
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Global Secure Access
Global Secure Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / External Identities
External Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Private Access
Private Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Internet Access
Internet Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure Active Directory
Azure Active Directory
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Domain Services
Azure AD Domain Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Domain Services
Entra Domain Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Groups
Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Active Directory Connect Health
Active Directory Connect Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Enterprise Applications
Enterprise Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra Managed Identities
Entra Managed Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Managed Identities
Managed Identities
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD B2C
Azure AD B2C
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure Information Protection
Azure Information Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Users
Users
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Identity Protection
Azure AD Identity Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Entra ID Protection
Entra ID Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / App Registrations
App Registrations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Privilege Identity Management
Azure AD Privilege Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Identity Governance
Identity Governance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / Azure AD Roles And Administrators
Azure AD Roles And Administrators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Identity / User Settings
User Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Integration

Azure Architecture Icons / Integration / SQL Data Warehouses
SQL Data Warehouses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Service Environments
Integration Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Topic
Partner Topic
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / System Topic
System Topic
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Registration
Partner Registration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Partner Namespace
Partner Namespace
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Logic Apps
Logic Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Environments
Integration Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Storsimple Device Managers
Storsimple Device Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Data Factories
Data Factories
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure SQL Server Stretch Databases
Azure SQL Server Stretch Databases
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Topics
Event Grid Topics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Relays
Relays
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure API For FHIR
Azure API For FHIR
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Software As A Service
Software As A Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Domains
Event Grid Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Data Catalog
Azure Data Catalog
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Integration Accounts
Integration Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / App Configuration
App Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Sendgrid Accounts
Sendgrid Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Event Grid Subscriptions
Event Grid Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Logic Apps Custom Connector
Logic Apps Custom Connector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Integration / Azure Service Bus
Azure Service Bus
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Intune

Azure Architecture Icons / Intune / Device Security Apple
Device Security Apple
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Security Google
Device Security Google
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Security Windows
Device Security Windows
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune
Intune
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Ebooks
Ebooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Client Apps
Client Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Devices
Devices
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Compliance
Device Compliance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Software Updates
Software Updates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Security Baselines
Security Baselines
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Enrollment
Device Enrollment
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Device Configuration
Device Configuration
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Exchange Access
Exchange Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Azure AD Roles And Administrators
Azure AD Roles And Administrators
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Tenant Status
Tenant Status
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune For Education
Intune For Education
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Intune App Protection
Intune App Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Intune / Mindaro
Mindaro
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

IoT

Azure Architecture Icons /  IoT  / Machine Learning Studio (Classic) Web Services
Machine Learning Studio (Classic) Web Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Hubs
Event Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Stream Analytics Jobs
Stream Analytics Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Digital Twins
Digital Twins
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Industrial Iot
Industrial Iot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Logic Apps
Logic Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Stack HCI Premium
Stack HCI Premium
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Iot Operations
Azure Iot Operations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Function Apps
Function Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Notification Hub Namespaces
Notification Hub Namespaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Stack
Azure Stack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Cosmos DB
Azure Cosmos DB
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Hub Clusters
Event Hub Clusters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Machine Learning Studio Workspaces
Machine Learning Studio Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Machine Learning Studio Web Service Plans
Machine Learning Studio Web Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Environments
Time Series Insights Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Hub
Iot Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Central Applications
Iot Central Applications
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Azure Maps Accounts
Azure Maps Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Iot Edge
Iot Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Event Sources
Time Series Insights Event Sources
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Insights Access Policies
Time Series Insights Access Policies
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Time Series Data Sets
Time Series Data Sets
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Windows10 Core Services
Windows10 Core Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Event Grid Subscriptions
Event Grid Subscriptions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons /  IoT  / Device Provisioning Services
Device Provisioning Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Management & Governance

Azure Architecture Icons / Management & Governance / Monitor
Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Alerts
Alerts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Advisor
Advisor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Blueprints
Blueprints
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Activity Log
Activity Log
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Diagnostics Settings
Diagnostics Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Scheduler Job Collections
Scheduler Job Collections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Compliance
Compliance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / My Customers
My Customers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Metrics
Metrics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Solutions
Solutions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Automation Accounts
Automation Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Operation Log (Classic)
Operation Log (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Service Providers
Service Providers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Education
Education
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Service Catalog MAD
Service Catalog MAD
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Intune Trends
Intune Trends
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Azure Lighthouse
Azure Lighthouse
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Universal Print
Universal Print
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Azure Arc
Azure Arc
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Arc Machines
Arc Machines
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Resources Provider
Resources Provider
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / User Privacy
User Privacy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Managed Desktop
Managed Desktop
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Managed Applications Center
Managed Applications Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Customer Lockbox For Microsoft Azure
Customer Lockbox For Microsoft Azure
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Policy
Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Resource Graph Explorer
Resource Graph Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Management & Governance / Machinesazurearc
Machinesazurearc
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Menu

Azure Architecture Icons / Menu / Keys
Keys
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Migrate

Azure Architecture Icons / Migrate / Cost Management And Billing
Cost Management And Billing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Data Box
Data Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Migrate / Azure Migrate
Azure Migrate
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Migration

Azure Architecture Icons / Migration / Azure Database Migration Services
Azure Database Migration Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Mixed Reality

Azure Architecture Icons / Mixed Reality / Remote Rendering
Remote Rendering
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mixed Reality / Spatial Anchor Accounts
Spatial Anchor Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Mobile

Azure Architecture Icons / Mobile / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mobile / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Mobile / Notification Hubs
Notification Hubs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Monitor

Azure Architecture Icons / Monitor / Monitor
Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Activity Log
Activity Log
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Diagnostics Settings
Diagnostics Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Log Analytics Workspaces
Log Analytics Workspaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Application Insights
Application Insights
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Metrics
Metrics
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Azure Monitors For SAP Solutions
Azure Monitors For SAP Solutions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Change Analysis
Change Analysis
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Azure Workbooks
Azure Workbooks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Network Watcher
Network Watcher
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Monitor / Auto Scale
Auto Scale
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Networking

Azure Architecture Icons / Networking / CDN Profiles
CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Firewall Manager
Azure Firewall Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Firewall Policy
Azure Firewall Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link
Private Link
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / IP Groups
IP Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual WAN Hub
Virtual WAN Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link Service
Private Link Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Resource Management Private Link
Resource Management Private Link
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Private Link Services
Private Link Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Load Balancer Hub
Load Balancer Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Bastions
Bastions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Router
Virtual Router
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Connected Cache
Connected Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Spot VMSS
Spot VMSS
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Spot VM
Spot VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Subnet
Subnet
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Private Resolver
DNS Private Resolver
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Azure Communications Gateway
Azure Communications Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Traffic Controller
Traffic Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Security Policy
DNS Security Policy
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Multistack
DNS Multistack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / ATM Multistack
ATM Multistack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / IP Address Manager
IP Address Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Networks
Virtual Networks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Load Balancers
Load Balancers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Network Gateways
Virtual Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / DNS Zones
DNS Zones
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Traffic Manager Profiles
Traffic Manager Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Watcher
Network Watcher
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Security Groups
Network Security Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Addresses (Classic)
Public IP Addresses (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Addresses
Public IP Addresses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / On Premises Data Gateways
On Premises Data Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Route Filters
Route Filters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Ddos Protection Plans
Ddos Protection Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Front Door And CDN Profiles
Front Door And CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Networks (Classic)
Virtual Networks (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Application Gateways
Application Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Local Network Gateways
Local Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Expressroute Circuits
Expressroute Circuits
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Network Interfaces
Network Interfaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Connections
Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Route Tables
Route Tables
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Firewalls
Firewalls
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Service Endpoint Policies
Service Endpoint Policies
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / NAT
NAT
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Virtual Wans
Virtual Wans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Web Application Firewall Policies(WAF)
Web Application Firewall Policies(WAF)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Proximity Placement Groups
Proximity Placement Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Reserved IP Addresses (Classic)
Reserved IP Addresses (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Networking / Public IP Prefixes
Public IP Prefixes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

New Icons

Azure Architecture Icons / New Icons / Connected Vehicle Platform
Connected Vehicle Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Azure Sustainability
Azure Sustainability
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Icm Troubleshooting
Icm Troubleshooting
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Osconfig
Osconfig
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Storage Actions
Storage Actions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Entra Connect Sync
Entra Connect Sync
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / New Icons / Entra Connect Health
Entra Connect Health
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Other

Azure Architecture Icons / Other / Azure Virtual Desktop
Azure Virtual Desktop
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / SSH Keys
SSH Keys
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Internet Analyzer Profiles
Internet Analyzer Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Cloud Shell
Azure Cloud Shell
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Video Analyzers
Video Analyzers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Expressroute Direct
Expressroute Direct
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Cost Export
Cost Export
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Communication Services
Azure Communication Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Peering Service
Peering Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Network Function Manager Functions
Azure Network Function Manager Functions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Log Analytics Query Pack
Log Analytics Query Pack
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Kubernetes
Arc Kubernetes
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Vmware Solution
Azure Vmware Solution
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Peerings
Peerings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Dashboard Hub
Dashboard Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Video Indexer
Azure Video Indexer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AVS VM
AVS VM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Postgresql
Arc Postgresql
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc SQL Managed Instance
Arc SQL Managed Instance
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc SQL Server
Arc SQL Server
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Data Collection Rules
Data Collection Rules
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Resource Mover
Resource Mover
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Chaos Studio
Azure Chaos Studio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Network Managers
Network Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Dedicated HSM
Dedicated HSM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Modular Data Center
Modular Data Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Template Specs
Template Specs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Arc Data Services
Arc Data Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Backup Center
Azure Backup Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Backup Vault
Backup Vault
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Device Update Iot Hub
Device Update Iot Hub
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Fiji
Fiji
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Monitor Dashboard
Azure Monitor Dashboard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / SCVMM Management Servers
SCVMM Management Servers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Cloud Services (Extended Support)
Cloud Services (Extended Support)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Support Center Blue
Azure Support Center Blue
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Web App & Database
Web App & Database
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure HPC Workbenches
Azure HPC Workbenches
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Disk Pool
Disk Pool
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Bare Metal Infrastructure
Bare Metal Infrastructure
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Private Endpoints
Private Endpoints
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Open Supply Chain Platform
Open Supply Chain Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Aquila
Aquila
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Reserved Capacity
Reserved Capacity
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Custom IP Prefix
Custom IP Prefix
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / FHIR Service
FHIR Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Medtech Service
Medtech Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Managed Instance Apache Cassandra
Managed Instance Apache Cassandra
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Confidential Ledgers
Confidential Ledgers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AAD Licenses
AAD Licenses
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Test Base
Test Base
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Orbital
Azure Orbital
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Capacity Reservation Groups
Capacity Reservation Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Windows Notification Services
Windows Notification Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Network Function Manager
Azure Network Function Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Mission Landing Zone
Mission Landing Zone
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Mobile Networks
Mobile Networks
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM App Definitions
VM App Definitions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM App Versions
VM App Versions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Edge Hardware Center
Azure Edge Hardware Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Resource Guard
Resource Guard
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Ceres
Ceres
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azurite
Azurite
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Update Management Center
Update Management Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Compute Galleries
Azure Compute Galleries
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Community Images
Community Images
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / VM Image Version
VM Image Version
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Savings Plans
Savings Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Worker Container App
Worker Container App
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Managed Grafana
Azure Managed Grafana
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Targets Management
Targets Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Storage Functions
Storage Functions
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Sonic Dash
Sonic Dash
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Compliance Center
Compliance Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Network Security Perimeters
Network Security Perimeters
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Load Testing
Azure Load Testing
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Visits Builder
Virtual Visits Builder
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Quotas
Azure Quotas
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Container Apps Environments
Container Apps Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / App Compliance Automation
App Compliance Automation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Instance For SAP
Virtual Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Center For SAP
Azure Center For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Storage Mover
Azure Storage Mover
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Central Service Instance For SAP
Central Service Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Kubernetes Fleet Manager
Kubernetes Fleet Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Express Route Traffic Collector
Express Route Traffic Collector
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Database Instance For SAP
Database Instance For SAP
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Elastic SAN
Elastic SAN
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Microsoft Dev Box
Microsoft Dev Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Deployment Environments
Azure Deployment Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Dev Tunnels
Azure Dev Tunnels
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Virtual Enclaves
Virtual Enclaves
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / AKS Istio
AKS Istio
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender CM Local Manager
Defender CM Local Manager
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender External Management
Defender External Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Freezer Monitor
Defender Freezer Monitor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Historian
Defender Historian
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender HMI
Defender HMI
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Marquee
Defender Marquee
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Robot Controller
Defender Robot Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Sensor
Defender Sensor
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Slot
Defender Slot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Web Guiding System
Defender Web Guiding System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender DCS Controller
Defender DCS Controller
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Distributer Control System
Defender Distributer Control System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Engineering Station
Defender Engineering Station
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Packaging System
Defender Industrial Packaging System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Printer
Defender Industrial Printer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Scale System
Defender Industrial Scale System
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Industrial Robot
Defender Industrial Robot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Meter
Defender Meter
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender PLC
Defender PLC
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Pneumatic Device
Defender Pneumatic Device
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Programable Board
Defender Programable Board
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender Relay
Defender Relay
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Defender RTU
Defender RTU
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / HDI AKS Cluster
HDI AKS Cluster
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure A
Azure A
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Local Network Gateways
Local Network Gateways
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Edge Management
Edge Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Instance Pools
Instance Pools
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azure Sphere
Azure Sphere
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / App Registrations
App Registrations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Exchange On Premises Access
Exchange On Premises Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / WAC
WAC
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Azureattestation
Azureattestation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / RTOS
RTOS
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Other / Web Jobs
Web Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Security

Azure Architecture Icons / Security / Detonation
Detonation
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender For Iot
Microsoft Defender For Iot
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Privleged Identity Management
Azure AD Privleged Identity Management
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender EASM
Microsoft Defender EASM
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Identity Secure Score
Identity Secure Score
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Risky Signins
Azure AD Risky Signins
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Risky Users
Azure AD Risky Users
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Authentication Methods
Azure AD Authentication Methods
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Multifactor Authentication
Multifactor Authentication
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure Information Protection
Azure Information Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure AD Identity Protection
Azure AD Identity Protection
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Conditional Access
Conditional Access
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Microsoft Defender For Cloud
Microsoft Defender For Cloud
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Application Security Groups
Application Security Groups
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Key Vaults
Key Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Azure Sentinel
Azure Sentinel
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / User Settings
User Settings
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Security / Extendedsecurityupdates
Extendedsecurityupdates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Storage

Azure Architecture Icons / Storage / Recovery Services Vaults
Recovery Services Vaults
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Databox Gateway
Azure Databox Gateway
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure HCP Cache
Azure HCP Cache
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Accounts
Storage Accounts
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Accounts (Classic)
Storage Accounts (Classic)
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storsimple Device Managers
Storsimple Device Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Lake Storage Gen1
Data Lake Storage Gen1
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Explorer
Storage Explorer
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storsimple Data Managers
Storsimple Data Managers
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Storage Sync Services
Storage Sync Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Box
Data Box
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Stack Edge
Azure Stack Edge
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Netapp Files
Azure Netapp Files
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Share Invitations
Data Share Invitations
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Data Shares
Data Shares
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Import Export Jobs
Import Export Jobs
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Storage / Azure Fileshares
Azure Fileshares
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |

Web

Azure Architecture Icons / Web / App Service Plans
App Service Plans
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Certificates
App Service Certificates
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Domains
App Service Domains
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Static Apps
Static Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Center
API Center
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Power Platform
Power Platform
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Space
App Space
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Services
App Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Management Services
API Management Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Cognitive Search
Cognitive Search
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / App Service Environments
App Service Environments
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / API Connections
API Connections
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Signalr
Signalr
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Notification Hub Namespaces
Notification Hub Namespaces
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Front Door And CDN Profiles
Front Door And CDN Profiles
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Cognitive Services
Cognitive Services
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Azure Media Service
Azure Media Service
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
Azure Architecture Icons / Web / Azure Spring Apps
Azure Spring Apps
Download the SVG or choose one of the following PNGs sizes: | 64 | 256 | 512 | 2048 |
 
\ No newline at end of file diff --git a/_output/azure-document-intelligence-sdk-preview-api.html b/_output/azure-document-intelligence-sdk-preview-api.html deleted file mode 100644 index d5ee9b2a9..000000000 --- a/_output/azure-document-intelligence-sdk-preview-api.html +++ /dev/null @@ -1,45 +0,0 @@ -Preview versions in Azure Document Intelligence client libraries

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Preview versions in Azure Document Intelligence client libraries

by George Kosmidis / Published 4 months and 1 week ago
Preview versions in Azure Document Intelligence client libraries

The Azure Document Intelligence API offers powerful capabilities for form recognition and document analysis. However, the client library for JavaScript that offers ease of usage might not always align with your needs, especially when it comes to using preview versions of the API. In this blog post, we'll explore how to override the default API version used by the Azure Document Intelligence SDK to leverage the latest preview features.

Why Override the Default API Version?

  • Access to New Features: Preview versions often include cutting-edge features not yet available in the stable release.
  • Customization: Tailor the API behavior to suit specific project requirements.
  • Future-proofing: Stay ahead of the curve by testing and integrating new capabilities early.

Steps to Implement Custom API Version Override

1. Creating the Custom Policy Class

The first step is to create a custom policy that overrides the default API version in the request URL.

import { PipelinePolicy, PipelineRequest, PipelineResponse, SendRequest } from '@azure/core-rest-pipeline';
-
-export class OverrideCustomApiVersionPolicy implements PipelinePolicy {
-  name: string = 'OverrideCustomApiVersionPolicy';
-  constructor(private apiVersion: string) {}
-
-  sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {
-    const url = new URL(request.url);
-    url.searchParams.set('api-version', this.apiVersion);
-    request.url = url.toString().replace('formrecognizer', 'documentintelligence');
-    var response = next(request);
-    console.info(`Azure Document Intelligence Request: ${request.url}`);
-    return response;
-  }
-}
-

2. Overriding the Default DocumentAnalysisClient

Next, we'll override the default DocumentAnalysisClient to incorporate our custom policy.

import { DocumentAnalysisClient } from '@azure/ai-form-recognizer';
-import { DocumentAnalysisClientOptionsPreview } from './DocumentAnalysisClientOptionsPreview';
-import { OverrideCustomApiVersionPolicy } from './OverrideCustomApiVersionPolicy';
-import { TokenCredential } from '@azure/identity';
-
-export class DocumentAnalysisClientPreview extends DocumentAnalysisClient {
-  constructor(endpoint: string, credential: TokenCredential, options: DocumentAnalysisClientOptionsPreview) {
-    super(endpoint, credential, options);
-    if (!options.additionalPolicies) {
-      options.additionalPolicies = [];
-    }
-    const policy = new OverrideCustomApiVersionPolicy(options.apiVersion);
-
-    // Add policy to the end of the pipeline to override the URL
-    // @ts-ignore
-    this._restClient.pipeline.addPolicy(policy);
-  }
-}
-

3. Defining Custom Options

We also need to define a custom options interface to include the API version.

import { DocumentAnalysisClientOptions } from '@azure/ai-form-recognizer';
-
-export interface DocumentAnalysisClientOptionsPreview extends DocumentAnalysisClientOptions {
-  apiVersion: string;
-}
-

4. Using the Custom Client

Finally, we instantiate and use the custom client in our application.

const client = new DocumentAnalysisClientPreview(
-  process.env.AZURE_DOCUMENT_INTELLIGENCE_ENDPOINT, 
-  tokenResolver.getToken(), 
-  { apiVersion: '2024-05-01-preview' }
-);
-

Conclusion

Although not perfect since it does not include potential model changes, implementing a custom API version override allows you to unlock preview versions of the Azure Document Intelligence API, access the latest features, and ensure your application remains at the forefront of technology - at least during development. Just keep in mind that this is NOT a production solution, as preview versions can change or be withdrawn without notice!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/azure-function-app-dotnet-isolated.html b/_output/azure-function-app-dotnet-isolated.html index 111a523ee..d465d880e 100644 --- a/_output/azure-function-app-dotnet-isolated.html +++ b/_output/azure-function-app-dotnet-isolated.html @@ -1,5 +1,5 @@ -Create an Azure Function App for dotnet out-of-proc

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Create an Azure Function App for dotnet out-of-proc

by George Kosmidis / Published 2 years and 1 month ago
Create an Azure Function App for dotnet out-of-proc

Did you know? In-process C# class library Azure Functions will not be supported from .NET 7.0 on! And although you should always target LTS and that gives you almost two years to adapt, the hard stop could require quite a massive rewrite!

But why this change?

Previously, an Azure Function was only supporting a tightly integrated mode for .NET functions - it could only run as a class library in the same process as the host. This mode was providing a deep integration between the two contributing to speed, but also providing the engineers with goodies like sharing binding APIs and types. However, this integration required a tighter coupling between the host process and the .NET function which means both had to run on the same version of .NET.

The version constrain above wasn't usually a problem though. Most of the developers out there didn't even notice the limitation and even more, all(?) of us enjoyed sharing types with mama Azure Function. But don't getting me wrong here; if it happened you were on the wrong side of the story, you were in for a ride! Massive problems with almost no solution available, rendering Azure Function decisions obsolete.

And then came Microsoft. With the out-of-proc approach solved the blockers for these few poor teams but also decided to stop supporting in-proc at all - how many combination of an Azure Function should Microsoft support? I mean, for the in-proc workloads you would need a host that can run all different supported .NET versions a developer might choose and then one more for the out-of-proc? That was too much I guess.

In any case, we are now here and this change does not come without benefits!

Benefits of running out-of-process

  • Process isolation lets you develop functions that use current .NET releases (such as .NET 7.0), not natively supported by the Functions runtime yet.
  • Fewer conflicts: because the functions run in a separate process, assemblies used in your app won't conflict with different version of the same assemblies used by the host process.
  • Full control of the process: you control the start-up of the app and can control the configurations used and the middleware started.
  • Dependency injection: because you have full control of the process, you can use current .NET behaviors for dependency injection and incorporating middleware into your function app (OK that's huge)

Supported versions

Functions runtime versionIn-processOut-of-process
Functions 4.x.NET 6.0.NET 6.0
.NET 7.0
.NET Framework 4.8
Functions 3.x.NET Core 3.1.NET 5.0
Functions 2.x.NET Core 2.1n/a
Functions 1.x.NET Framework 4.8n/a

Creating a .NET 6 isolated project

Let's sample a dotnet-isolated function!

The following is a list of prerequisites you must have to run the code that follows. Please go through them and once done continue to the exciting part!

Prerequisites

Before you begin, you must have the following:

Let's create our function!

After making sure that all of the requirements above are met, navigate to the folder your wish to create your project and run:

func init YourFunctionProject --worker-runtime dotnet-isolated --target-framework net6.0
+Create an Azure Function App for dotnet out-of-proc

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Create an Azure Function App for dotnet out-of-proc

by George Kosmidis / Published 2 years and 1 month ago
Create an Azure Function App for dotnet out-of-proc

Did you know? In-process C# class library Azure Functions will not be supported from .NET 7.0 on! And although you should always target LTS and that gives you almost two years to adapt, the hard stop could require quite a massive rewrite!

But why this change?

Previously, an Azure Function was only supporting a tightly integrated mode for .NET functions - it could only run as a class library in the same process as the host. This mode was providing a deep integration between the two contributing to speed, but also providing the engineers with goodies like sharing binding APIs and types. However, this integration required a tighter coupling between the host process and the .NET function which means both had to run on the same version of .NET.

The version constrain above wasn't usually a problem though. Most of the developers out there didn't even notice the limitation and even more, all(?) of us enjoyed sharing types with mama Azure Function. But don't getting me wrong here; if it happened you were on the wrong side of the story, you were in for a ride! Massive problems with almost no solution available, rendering Azure Function decisions obsolete.

And then came Microsoft. With the out-of-proc approach solved the blockers for these few poor teams but also decided to stop supporting in-proc at all - how many combination of an Azure Function should Microsoft support? I mean, for the in-proc workloads you would need a host that can run all different supported .NET versions a developer might choose and then one more for the out-of-proc? That was too much I guess.

In any case, we are now here and this change does not come without benefits!

Benefits of running out-of-process

  • Process isolation lets you develop functions that use current .NET releases (such as .NET 7.0), not natively supported by the Functions runtime yet.
  • Fewer conflicts: because the functions run in a separate process, assemblies used in your app won't conflict with different version of the same assemblies used by the host process.
  • Full control of the process: you control the start-up of the app and can control the configurations used and the middleware started.
  • Dependency injection: because you have full control of the process, you can use current .NET behaviors for dependency injection and incorporating middleware into your function app (OK that's huge)

Supported versions

Functions runtime versionIn-processOut-of-process
Functions 4.x.NET 6.0.NET 6.0
.NET 7.0
.NET Framework 4.8
Functions 3.x.NET Core 3.1.NET 5.0
Functions 2.x.NET Core 2.1n/a
Functions 1.x.NET Framework 4.8n/a

Creating a .NET 6 isolated project

Let's sample a dotnet-isolated function!

The following is a list of prerequisites you must have to run the code that follows. Please go through them and once done continue to the exciting part!

Prerequisites

Before you begin, you must have the following:

Let's create our function!

After making sure that all of the requirements above are met, navigate to the folder your wish to create your project and run:

func init YourFunctionProject --worker-runtime dotnet-isolated --target-framework net6.0
 

This will create a new folder named after your chosen function name (here YourFunctionProject). Navigate into that folder and you should see the followings (among other):

  • host.json file.
    stores configuration settings that affect all functions in the project when running locally or in Azure.
  • local.settings.json file
    stores app settings and connection strings that are used when running locally. This file contains secrets and isn't published to your function app in Azure. Instead, add app settings to your function app.
  • C# project file (.csproj)
    defines the project and dependencies.
  • Program.cs
    a file that's the entry point for the app.
  • .vscode folder
    Yep, it's Visual Studio Code ready :)

In Azure Functions, a function project is a container for one or more individual functions that each responds to a specific trigger. All functions in a project share the same local and hosting configurations.

Creating an operation for our function

As noted, the function we just created is an empty container; it contains no trigger, no code, no nothing. If we want to do something meaningful we should add an operation to the project by using the following command, where the --name argument is the unique name of the operation (here HttpExample) and the --template argument specifies the function's trigger (here HTTP).

   func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
 
Upon running the command, a file HttpExample.cs will be created with the following sample code:
using System.Collections.Generic;
@@ -82,4 +82,4 @@
 
     public HttpResponseData HttpReponse { get; set; }
 }
-

Conclusion

That was it! Get some samples over here and start and dive into the new Azure Function approach!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Conclusion

That was it! Get some samples over here and start and dive into the new Azure Function approach!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/building-real-time-apps-with-signalr-in-dotnet.html b/_output/building-real-time-apps-with-signalr-in-dotnet.html index a04e97463..e933114b2 100644 --- a/_output/building-real-time-apps-with-signalr-in-dotnet.html +++ b/_output/building-real-time-apps-with-signalr-in-dotnet.html @@ -1,5 +1,5 @@ -Building Real-Time Apps with SignalR in .NET

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Building Real-Time Apps with SignalR in .NET

by George Kosmidis / Published 1 year and 4 months ago
Building Real-Time Apps with SignalR in .NET

Introduction

In the digital age, the demand for interactive, real-time web applications is more prominent than ever. From live chat systems to instant notifications, users expect seamless, immediate interactions when they navigate online platforms. This is where SignalR, a powerful .NET library, steps in to revolutionize how developers build these dynamic experiences.

What is SignalR?

SignalR is an open-source library that simplifies the process of adding real-time web functionality to applications. It enables two-way communication between the server and the client in real-time. As a part of the .NET ecosystem, SignalR seamlessly integrates with existing .NET applications, offering a robust solution for developing real-time features.

Key Features and Benefits

  • Real-Time Communication: SignalR facilitates instant data exchange, enabling features like chat systems, live feeds, and notifications.
  • Scalability: Easily scales to accommodate a high number of connections, making it suitable for large-scale applications.
  • Fallback Mechanisms: It intelligently falls back to older technologies if WebSockets are not supported, ensuring wide compatibility.
  • High-Level Abstractions: SignalR abstracts complex networking and concurrency issues, allowing developers to focus on core functionality.

Getting Started with SignalR

Prerequisites

  • Basic knowledge of .NET.
  • Visual Studio or another .NET-compatible IDE.
  • Latest .NET Core SDK installed on your machine.

Setting Up a New .NET Project with SignalR

  1. Create a new .NET Core Web Application.
  2. Install the Microsoft.AspNetCore.SignalR NuGet package.
  3. Configure SignalR in the Startup.cs file.

Core Concepts of SignalR

Hubs

Hubs in SignalR serve as the main conduit for communication between clients and the server. They are designed to simplify the process of sending messages back and forth, abstracting the complexities of connection management and method invocation. Here's a closer look at what makes Hubs a central piece of the SignalR architecture:

  • Method Invocation: Hubs allow the server to call methods on clients and vice versa. This means you can easily call JavaScript functions from C# code on the server and C# methods from JavaScript in the client.
  • Strong Typing: SignalR provides a strongly typed hub interface, enabling developers to define methods on the server that clients can call, leading to compile-time checking and IntelliSense support in IDEs.
  • Group Management: Hubs facilitate adding or removing connections to named groups, allowing for targeted messaging to subsets of connected clients, such as a chat room or a specific user category.

Connections

The concept of connections is fundamental to understanding SignalR. Each client connecting to a SignalR hub establishes a "connection" represented by a unique connection ID. SignalR abstracts the connection details, allowing developers to focus on the application logic rather than the intricacies of real-time communication protocols.

  • Connection Lifecycle: SignalR manages the lifecycle of connections, handling events like connect, disconnect, and reconnect. Developers can hook into these events to perform actions, such as updating a user list when someone joins or leaves a chat.
  • Transport Fallbacks: SignalR uses WebSockets as its primary transport but can fall back to other techniques (like server-sent events or long polling) if necessary. This ensures compatibility across a wide range of browsers and network environments.
  • Connection Security: SignalR integrates with ASP.NET Core's security models, allowing the use of authentication and authorization mechanisms to control access to hubs and methods based on the connected user.

Messages

Messages are the payload of information exchanged between clients and servers. SignalR simplifies the process of sending messages, whether it's broadcasting to all connected clients, targeting specific groups, or sending direct messages to individual connections.

  • Broadcasting: Sending a message to all connected clients simultaneously. This is useful for features like announcements or live updates.
  • User and Group Messages: SignalR allows messages to be sent to specific groups or users. This is particularly useful for applications like chat rooms, where you might want to send a message to everyone in a particular room or direct messages between users.
  • Client-to-Server and Server-to-Client: Messages can flow in both directions. Clients can invoke methods on the server, and the server can send messages to one or more clients.
  • Performance Considerations: While sending messages is straightforward, developers must consider the impact of message size and frequency on performance and scalability, especially in applications with a large number of clients.

Building a Real-Time Chat Application with SignalR

This tutorial will guide you through creating a feature-rich chat application using SignalR, covering both the basics and some advanced functionalities like handling user connections/disconnections and enabling private messaging.

Server-Side (Hub) Implementation

The following C# code defines a ChatHub class that inherits from SignalR's Hub class, which is a central part of building real-time, interactive applications using SignalR.

public class ChatHub : Hub
+Building Real-Time Apps with SignalR in .NET

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Building Real-Time Apps with SignalR in .NET

by George Kosmidis / Published 1 year and 4 months ago
Building Real-Time Apps with SignalR in .NET

Introduction

In the digital age, the demand for interactive, real-time web applications is more prominent than ever. From live chat systems to instant notifications, users expect seamless, immediate interactions when they navigate online platforms. This is where SignalR, a powerful .NET library, steps in to revolutionize how developers build these dynamic experiences.

What is SignalR?

SignalR is an open-source library that simplifies the process of adding real-time web functionality to applications. It enables two-way communication between the server and the client in real-time. As a part of the .NET ecosystem, SignalR seamlessly integrates with existing .NET applications, offering a robust solution for developing real-time features.

Key Features and Benefits

  • Real-Time Communication: SignalR facilitates instant data exchange, enabling features like chat systems, live feeds, and notifications.
  • Scalability: Easily scales to accommodate a high number of connections, making it suitable for large-scale applications.
  • Fallback Mechanisms: It intelligently falls back to older technologies if WebSockets are not supported, ensuring wide compatibility.
  • High-Level Abstractions: SignalR abstracts complex networking and concurrency issues, allowing developers to focus on core functionality.

Getting Started with SignalR

Prerequisites

  • Basic knowledge of .NET.
  • Visual Studio or another .NET-compatible IDE.
  • Latest .NET Core SDK installed on your machine.

Setting Up a New .NET Project with SignalR

  1. Create a new .NET Core Web Application.
  2. Install the Microsoft.AspNetCore.SignalR NuGet package.
  3. Configure SignalR in the Startup.cs file.

Core Concepts of SignalR

Hubs

Hubs in SignalR serve as the main conduit for communication between clients and the server. They are designed to simplify the process of sending messages back and forth, abstracting the complexities of connection management and method invocation. Here's a closer look at what makes Hubs a central piece of the SignalR architecture:

  • Method Invocation: Hubs allow the server to call methods on clients and vice versa. This means you can easily call JavaScript functions from C# code on the server and C# methods from JavaScript in the client.
  • Strong Typing: SignalR provides a strongly typed hub interface, enabling developers to define methods on the server that clients can call, leading to compile-time checking and IntelliSense support in IDEs.
  • Group Management: Hubs facilitate adding or removing connections to named groups, allowing for targeted messaging to subsets of connected clients, such as a chat room or a specific user category.

Connections

The concept of connections is fundamental to understanding SignalR. Each client connecting to a SignalR hub establishes a "connection" represented by a unique connection ID. SignalR abstracts the connection details, allowing developers to focus on the application logic rather than the intricacies of real-time communication protocols.

  • Connection Lifecycle: SignalR manages the lifecycle of connections, handling events like connect, disconnect, and reconnect. Developers can hook into these events to perform actions, such as updating a user list when someone joins or leaves a chat.
  • Transport Fallbacks: SignalR uses WebSockets as its primary transport but can fall back to other techniques (like server-sent events or long polling) if necessary. This ensures compatibility across a wide range of browsers and network environments.
  • Connection Security: SignalR integrates with ASP.NET Core's security models, allowing the use of authentication and authorization mechanisms to control access to hubs and methods based on the connected user.

Messages

Messages are the payload of information exchanged between clients and servers. SignalR simplifies the process of sending messages, whether it's broadcasting to all connected clients, targeting specific groups, or sending direct messages to individual connections.

  • Broadcasting: Sending a message to all connected clients simultaneously. This is useful for features like announcements or live updates.
  • User and Group Messages: SignalR allows messages to be sent to specific groups or users. This is particularly useful for applications like chat rooms, where you might want to send a message to everyone in a particular room or direct messages between users.
  • Client-to-Server and Server-to-Client: Messages can flow in both directions. Clients can invoke methods on the server, and the server can send messages to one or more clients.
  • Performance Considerations: While sending messages is straightforward, developers must consider the impact of message size and frequency on performance and scalability, especially in applications with a large number of clients.

Building a Real-Time Chat Application with SignalR

This tutorial will guide you through creating a feature-rich chat application using SignalR, covering both the basics and some advanced functionalities like handling user connections/disconnections and enabling private messaging.

Server-Side (Hub) Implementation

The following C# code defines a ChatHub class that inherits from SignalR's Hub class, which is a central part of building real-time, interactive applications using SignalR.

public class ChatHub : Hub
 {
     // Notifies all connected clients when a new user connects to the chat
     public override async Task OnConnectedAsync()
@@ -94,4 +94,4 @@
     // Cleanup logic here
     await base.OnDisconnectedAsync(exception);
 }
-

Implementing connection tracking can be done by maintaining a mapping of user identifiers to connection IDs, enabling targeted communication and connection-specific actions.

Scaling SignalR Applications

For SignalR applications to support thousands to millions of concurrent connections, scaling out is necessary. Azure SignalR Service is designed to handle this by offloading the connection management and scaling requirements from your servers. Although an intro into Azure SignalR worths an article, here is a small spoiler!

How Azure SignalR Service Works

  • Automatic Scaling: Azure SignalR Service automatically scales to accommodate the number of connections, allowing you to focus on application logic rather than infrastructure concerns.

  • Serverless Compatibility: It can operate in a serverless mode, enabling you to build applications without managing servers, further simplifying the development process.

  • Integration with Azure Functions: You can integrate SignalR with Azure Functions to trigger real-time messages in response to events, creating highly responsive and dynamic applications.

Implementing Azure SignalR Service

  1. Provision Azure SignalR Service: Through the Azure portal, create an instance of the Azure SignalR Service and configure it according to your application's needs.

  2. Update Your Application Configuration: Integrate the service into your application by updating the connection strings and configuring your application to use Azure SignalR Service.

  3. Adjust Your Code for Azure SignalR: Ensure your application logic is compatible with the distributed nature of the cloud service, especially regarding connection and group management.

Conclusion

In conclusion, SignalR stands out as a powerful tool in the .NET arsenal for building sophisticated real-time web applications. Its ability to facilitate instantaneous communication between the server and the client opens up endless possibilities for creating interactive, dynamic user experiences. By leveraging SignalR, we can easily implement features such as live chats, real-time updates, and interactive games, significantly enhancing the user engagement and satisfaction.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Implementing connection tracking can be done by maintaining a mapping of user identifiers to connection IDs, enabling targeted communication and connection-specific actions.

Scaling SignalR Applications

For SignalR applications to support thousands to millions of concurrent connections, scaling out is necessary. Azure SignalR Service is designed to handle this by offloading the connection management and scaling requirements from your servers. Although an intro into Azure SignalR worths an article, here is a small spoiler!

How Azure SignalR Service Works

Implementing Azure SignalR Service

  1. Provision Azure SignalR Service: Through the Azure portal, create an instance of the Azure SignalR Service and configure it according to your application's needs.

  2. Update Your Application Configuration: Integrate the service into your application by updating the connection strings and configuring your application to use Azure SignalR Service.

  3. Adjust Your Code for Azure SignalR: Ensure your application logic is compatible with the distributed nature of the cloud service, especially regarding connection and group management.

Conclusion

In conclusion, SignalR stands out as a powerful tool in the .NET arsenal for building sophisticated real-time web applications. Its ability to facilitate instantaneous communication between the server and the client opens up endless possibilities for creating interactive, dynamic user experiences. By leveraging SignalR, we can easily implement features such as live chats, real-time updates, and interactive games, significantly enhancing the user engagement and satisfaction.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/c-basic-combinatorics.html b/_output/c-basic-combinatorics.html index 98f3b7a5e..847551b90 100644 --- a/_output/c-basic-combinatorics.html +++ b/_output/c-basic-combinatorics.html @@ -1,11 +1,11 @@ C#: Basic Combinatorics

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Basic Combinatorics

by George Kosmidis / Published 11 years ago, modified 4 years and 3 months ago

Basic combinatorics in C# is a straight forward task for relatively small numbers like (100!). This is a helper class I wrote when I was asked to write an online lottery system.

Keep in mind though, that for bigger numbers (above 100!) you will need Arbitrary-precision arithmetic.

Here is the code and please, if someone knows a faster way or has some suggestions let me now!

public class BasicCombinatorics
+ Here is the code and please, if someone knows a faster way or has some suggestions let me now!">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Basic Combinatorics

by George Kosmidis / Published 11 years ago, modified 4 years and 3 months ago

Basic combinatorics in C# is a straight forward task for relatively small numbers like (100!). This is a helper class I wrote when I was asked to write an online lottery system.

Keep in mind though, that for bigger numbers (above 100!) you will need Arbitrary-precision arithmetic.

Here is the code and please, if someone knows a faster way or has some suggestions let me now!

public class BasicCombinatorics
 {
 
     /// 
@@ -142,4 +142,4 @@
             result += i;
         return result;
     }
-}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/c-calculating-all-greek-holidays-for-any-given-year.html b/_output/c-calculating-all-greek-holidays-for-any-given-year.html index 9e7c03690..4cf076cf2 100644 --- a/_output/c-calculating-all-greek-holidays-for-any-given-year.html +++ b/_output/c-calculating-all-greek-holidays-for-any-given-year.html @@ -1,5 +1,5 @@ -C#: Calculating all Greek Public Holidays for any given year

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Calculating all Greek Public Holidays for any given year

by George Kosmidis / Published 11 years and 4 months ago, modified 4 years and 3 months ago

After calculating the Greek Orthodox Easter, it was time for the public holidays calculation. With the Easter calculation ready, it proved to be much easier than expected!

/// 
+C#: Calculating all Greek Public Holidays for any given year

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Calculating all Greek Public Holidays for any given year

by George Kosmidis / Published 11 years and 4 months ago, modified 4 years and 3 months ago

After calculating the Greek Orthodox Easter, it was time for the public holidays calculation. With the Easter calculation ready, it proved to be much easier than expected!

/// 
 /// Get all Greek holidays for requested year
 /// 
 /// Year of holidays
@@ -25,4 +25,4 @@
     holidays.Add(new DateTime(year, 12, 26));   //deyterh mera
 
     return holidays;
-}

You can find the code that calculates Greek Orthodox Easter here: /c-calculating-orthodox-and-catholic-easter/

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

You can find the code that calculates Greek Orthodox Easter here: /c-calculating-orthodox-and-catholic-easter/

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/c-calculating-orthodox-and-catholic-easter.html b/_output/c-calculating-orthodox-and-catholic-easter.html index 091cb3978..6f759fab7 100644 --- a/_output/c-calculating-orthodox-and-catholic-easter.html +++ b/_output/c-calculating-orthodox-and-catholic-easter.html @@ -1,5 +1,5 @@ -C#: Calculating Orthodox and Catholic Easter

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Calculating Orthodox and Catholic Easter

by George Kosmidis / Published 11 years and 4 months ago, modified 3 years ago

Some time ago I was called about an online calendar for a company’s portal. The need was to inform employees about public holidays for the requested year. In Greece, some of those holidays are static meaning they occur the exact same date each year, but some are based on the Orthodox Easter so they move from date to date. There are a lot of online services that can return these information, but I thought I should give it a go and try writing the Orthodox Easter calculation in C#. Saying that, I found the algorithm online and since I was there I also found the Catholic Easter algorithm.

In this post you will find the calculation for the two Christianity events only, and in a later post I will also publish the public holidays calculation.

Have in mind that since the methods return DateTime “every possible year” is not quite accurate! And besides, both algorithms have problems after year 4200. You can read more about it here: http://en.wikipedia.org/wiki/Computus

This is the Orthodox Easter calculation:

/// <summary>
+C#: Calculating Orthodox and Catholic Easter

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Calculating Orthodox and Catholic Easter

by George Kosmidis / Published 11 years and 4 months ago, modified 3 years ago

Some time ago I was called about an online calendar for a company’s portal. The need was to inform employees about public holidays for the requested year. In Greece, some of those holidays are static meaning they occur the exact same date each year, but some are based on the Orthodox Easter so they move from date to date. There are a lot of online services that can return these information, but I thought I should give it a go and try writing the Orthodox Easter calculation in C#. Saying that, I found the algorithm online and since I was there I also found the Catholic Easter algorithm.

In this post you will find the calculation for the two Christianity events only, and in a later post I will also publish the public holidays calculation.

Have in mind that since the methods return DateTime “every possible year” is not quite accurate! And besides, both algorithms have problems after year 4200. You can read more about it here: http://en.wikipedia.org/wiki/Computus

This is the Orthodox Easter calculation:

/// <summary>
 /// Get Orthodox easter for requested year
 /// </summary>
 /// <param name="year">Year of easter</param>
@@ -51,4 +51,4 @@
         month = 4;
     }
     return new DateTime(year, month, day);
-}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for.html b/_output/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for.html index 8fb8dfced..6c697553f 100644 --- a/_output/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for.html +++ b/_output/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for.html @@ -1,5 +1,5 @@ -C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

by George Kosmidis / Published 11 years and 5 months ago, modified 4 years and 3 months ago

Did you know that HTTP_X_FORWARDED_FOR can return multiple IPs? According to http://en.wikipedia.org/wiki/X-Forwarded-For the format is:

X-Forwarded-For: client, proxy1, proxy2
+C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

by George Kosmidis / Published 11 years and 5 months ago, modified 4 years and 3 months ago

Did you know that HTTP_X_FORWARDED_FOR can return multiple IPs? According to http://en.wikipedia.org/wiki/X-Forwarded-For the format is:

X-Forwarded-For: client, proxy1, proxy2
 

So you just need:


 public static string GetUserIP()
 {
@@ -12,4 +12,4 @@
 	}
     return ip;
 }
-

Simple as that!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Simple as that!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/code-snippet-how-to-upload-an-image-with-ftps-in-dotnet-core.html b/_output/code-snippet-how-to-upload-an-image-with-ftps-in-dotnet-core.html index b586bcdd1..819a71e49 100644 --- a/_output/code-snippet-how-to-upload-an-image-with-ftps-in-dotnet-core.html +++ b/_output/code-snippet-how-to-upload-an-image-with-ftps-in-dotnet-core.html @@ -1,5 +1,5 @@ -Code Snippet: How to upload an image with FTPS in ASP.NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Code Snippet: How to upload an image with FTPS in ASP.NET Core

by George Kosmidis / Published 4 years and 2 months ago
Code Snippet: How to upload an image with FTPS in ASP.NET Core

This post is contains sample on how to upload an image with FTPS in ASP.NET Core. It also contains a cheat sheet of all the properties and methods of an instance of an FtpWebRequest object, mostly as a quick reference guide.

The sample!

I know it is usually the other way around, but I kind of feel this is the most important part of this post! If you want to learn more about all the properties and methods of an instance of FtpWebRequest, keep scrolling!

public class SampleFTP {
+Code Snippet: How to upload an image with FTPS in ASP.NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Code Snippet: How to upload an image with FTPS in ASP.NET Core

by George Kosmidis / Published 4 years and 2 months ago
Code Snippet: How to upload an image with FTPS in ASP.NET Core

This post is contains sample on how to upload an image with FTPS in ASP.NET Core. It also contains a cheat sheet of all the properties and methods of an instance of an FtpWebRequest object, mostly as a quick reference guide.

The sample!

I know it is usually the other way around, but I kind of feel this is the most important part of this post! If you want to learn more about all the properties and methods of an instance of FtpWebRequest, keep scrolling!

public class SampleFTP {
     
     //...
     
@@ -40,4 +40,4 @@
     }
     
     //...
-}

Properties of an instance of an FtpWebRequest object.

The following is a table containing all properties of an instance of an FtpWebRequest object. In bold you will find the ones mostly used and in italics the properties not supported.

PropertyShort explanation
string Method { get; set; } Gets or sets the command to send to the FTP server.
(e.g. request.Method = WebRequestMethods.Ftp.UploadFile;)
Check the container class of the System.Net.WebRequestMethods.Ftp class for available commands.
ICredentials Credentials { get; set; } Set the credentials used to communicate with the FTP server.
(e.g. request.Credentials = new NetworkCredential(username, password);)
bool KeepAlive { get; set; } Keep the connection alive after the request completes. Default is true.
(e.g. request.KeepAlive = true;)
bool UsePassive { get; set; } Client should initiate a connection on the data port. Default is true.
(e.g. request.UsePassive = true;)
bool EnableSsl { get; set; } Set control and data transmissions to be encrypted. Default is true.
(e.g. request.EnableSsl= true;)
bool UseBinary Indicate to the server that the data to be transferred is binary. Default is true.
(e.g. request.UseBinary = true;)
int Timeout { get; set; } Set the number of milliseconds to wait for a request.
(e.g. request.Timeout = 5000;)
string RenameTo { get; set; } Set the new name of a file being renamed.
(e.g. request.RenameTo = "new_name";)
AuthenticationLevel AuthenticationLevel { get; set; } Indicate the level of authentication and impersonation used for this request.
(e.g. request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;)
X509CertificateCollection ClientCertificates { get; set; } Set the certificates used for establishing an encrypted connection to the FTP server.
(e.g. request.ClientCertificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection();)
string ConnectionGroupName { get; set; } Set the name of the connection group that contains the service point used to send the current request.
(e.g. request.ConnectionGroupName = "The .NET Lab";)
long ContentOffset { get; set; } Byte offset into the file being downloaded by this request.
(e.g. request.ContentOffset = 512;)
IWebProxy Proxy { get; set; } Set the proxy used to communicate with the FTP server.
(e.g. request.Proxy = new WebProxy();)
int ReadWriteTimeout { get; set; } Set a time-out when reading from or writing to a stream.
(e.g. request.ReadWriteTimeout = 30;)
Uri RequestUri { get; } Get the URI requested by this instance.
(e.g. var uri = request.RequestUri;)
ServicePoint ServicePoint { get; } Get the System.Net.ServicePoint object used to connect to the FTP server.
(e.g. var servicepoint = request.ServicePoint;)
WebHeaderCollection Headers { get; set; } It’s always empty!
bool PreAuthenticate { get; set; } Not supported!
string ContentType { get; set; } Not supported!
long ContentLength { get; set; } Value is ignored, don’t use it!
bool UseDefaultCredentials { get; set; } Not supported!

Methods of an instance of an FtpWebRequest object.

Same as before, the most common methods can be found with bold and in the top!

PropertyShort explanation
.Create() Initialize a new System.Net.WebRequest instance for the specified URI scheme.
(e.g. var request = (FtpWebRequest)WebRequest.Create(host + "/" + path + "/" + filename);)
WebResponse GetResponse(); Retrieve the stream used to upload data to an FTP server.
(e.g. WebResponse response = request.GetResponse();)
Task<WebResponse> GetResponseAsync(); Retrieve the stream used to upload data to an FTP server asynchronously.
(e.g. var response = await request.GetResponse();)
void Abort(); Terminate an asynchronous FTP operation.
(e.g. request.Abort();)
IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state); Begin asynchronously opening a request’s content stream for writing.
(e.g. request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);)
Check the Microsoft Docs for more info.
Stream EndGetRequestStream(IAsyncResult asyncResult); Begin asynchronously opening a request’s content stream for writing.
(e.g. Stream postStream = request.EndGetRequestStream(asynchronousResult);)
Check the Microsoft Docs for more info.
IAsyncResult BeginGetResponse(AsyncCallback callback, object state) Begin sending a request and receiving a response from an FTP server asynchronously.
(e.g. IAsyncResult result=
(IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
)
Check the Microsoft Docs for more info.
WebResponse EndGetResponse(IAsyncResult asyncResult) Ends a pending asynchronous operation started with BeginGetResponse(System.AsyncCallback,System.Object).
(e.g. myRequestState.response = (HttpWebResponse) myHttpWebRequest2.EndGetResponse(asynchronousResult);)
Check the Microsoft Docs for more info.
Stream GetRequestStream(); Retrieve the stream used to upload data to an FTP server.
(e.g. var stream = request.GetRequestStream();)
Check the Microsoft Docs for more info.
Task<Stream> GetRequestStreamAsync(); Retrieve the stream used to upload data to an FTP server asynchronously.
(e.g. var stream = await request.GetRequestStreamAsync();)
object InitializeLifetimeService(); Obtain a lifetime service object to control the lifetime policy for this instance.
(e.g. var service = request.InitializeLifetimeService();)
object GetLifetimeService(); Retrieve the current lifetime service object that controls the lifetime policy for this instance.
(e.g. var service = request.GetLifetimeService();)
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Properties of an instance of an FtpWebRequest object.

The following is a table containing all properties of an instance of an FtpWebRequest object. In bold you will find the ones mostly used and in italics the properties not supported.

PropertyShort explanation
string Method { get; set; } Gets or sets the command to send to the FTP server.
(e.g. request.Method = WebRequestMethods.Ftp.UploadFile;)
Check the container class of the System.Net.WebRequestMethods.Ftp class for available commands.
ICredentials Credentials { get; set; } Set the credentials used to communicate with the FTP server.
(e.g. request.Credentials = new NetworkCredential(username, password);)
bool KeepAlive { get; set; } Keep the connection alive after the request completes. Default is true.
(e.g. request.KeepAlive = true;)
bool UsePassive { get; set; } Client should initiate a connection on the data port. Default is true.
(e.g. request.UsePassive = true;)
bool EnableSsl { get; set; } Set control and data transmissions to be encrypted. Default is true.
(e.g. request.EnableSsl= true;)
bool UseBinary Indicate to the server that the data to be transferred is binary. Default is true.
(e.g. request.UseBinary = true;)
int Timeout { get; set; } Set the number of milliseconds to wait for a request.
(e.g. request.Timeout = 5000;)
string RenameTo { get; set; } Set the new name of a file being renamed.
(e.g. request.RenameTo = "new_name";)
AuthenticationLevel AuthenticationLevel { get; set; } Indicate the level of authentication and impersonation used for this request.
(e.g. request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;)
X509CertificateCollection ClientCertificates { get; set; } Set the certificates used for establishing an encrypted connection to the FTP server.
(e.g. request.ClientCertificates = new System.Security.Cryptography.X509Certificates.X509CertificateCollection();)
string ConnectionGroupName { get; set; } Set the name of the connection group that contains the service point used to send the current request.
(e.g. request.ConnectionGroupName = "The .NET Lab";)
long ContentOffset { get; set; } Byte offset into the file being downloaded by this request.
(e.g. request.ContentOffset = 512;)
IWebProxy Proxy { get; set; } Set the proxy used to communicate with the FTP server.
(e.g. request.Proxy = new WebProxy();)
int ReadWriteTimeout { get; set; } Set a time-out when reading from or writing to a stream.
(e.g. request.ReadWriteTimeout = 30;)
Uri RequestUri { get; } Get the URI requested by this instance.
(e.g. var uri = request.RequestUri;)
ServicePoint ServicePoint { get; } Get the System.Net.ServicePoint object used to connect to the FTP server.
(e.g. var servicepoint = request.ServicePoint;)
WebHeaderCollection Headers { get; set; } It’s always empty!
bool PreAuthenticate { get; set; } Not supported!
string ContentType { get; set; } Not supported!
long ContentLength { get; set; } Value is ignored, don’t use it!
bool UseDefaultCredentials { get; set; } Not supported!

Methods of an instance of an FtpWebRequest object.

Same as before, the most common methods can be found with bold and in the top!

PropertyShort explanation
.Create() Initialize a new System.Net.WebRequest instance for the specified URI scheme.
(e.g. var request = (FtpWebRequest)WebRequest.Create(host + "/" + path + "/" + filename);)
WebResponse GetResponse(); Retrieve the stream used to upload data to an FTP server.
(e.g. WebResponse response = request.GetResponse();)
Task<WebResponse> GetResponseAsync(); Retrieve the stream used to upload data to an FTP server asynchronously.
(e.g. var response = await request.GetResponse();)
void Abort(); Terminate an asynchronous FTP operation.
(e.g. request.Abort();)
IAsyncResult BeginGetRequestStream(AsyncCallback callback, object state); Begin asynchronously opening a request’s content stream for writing.
(e.g. request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);)
Check the Microsoft Docs for more info.
Stream EndGetRequestStream(IAsyncResult asyncResult); Begin asynchronously opening a request’s content stream for writing.
(e.g. Stream postStream = request.EndGetRequestStream(asynchronousResult);)
Check the Microsoft Docs for more info.
IAsyncResult BeginGetResponse(AsyncCallback callback, object state) Begin sending a request and receiving a response from an FTP server asynchronously.
(e.g. IAsyncResult result=
(IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);
)
Check the Microsoft Docs for more info.
WebResponse EndGetResponse(IAsyncResult asyncResult) Ends a pending asynchronous operation started with BeginGetResponse(System.AsyncCallback,System.Object).
(e.g. myRequestState.response = (HttpWebResponse) myHttpWebRequest2.EndGetResponse(asynchronousResult);)
Check the Microsoft Docs for more info.
Stream GetRequestStream(); Retrieve the stream used to upload data to an FTP server.
(e.g. var stream = request.GetRequestStream();)
Check the Microsoft Docs for more info.
Task<Stream> GetRequestStreamAsync(); Retrieve the stream used to upload data to an FTP server asynchronously.
(e.g. var stream = await request.GetRequestStreamAsync();)
object InitializeLifetimeService(); Obtain a lifetime service object to control the lifetime policy for this instance.
(e.g. var service = request.InitializeLifetimeService();)
object GetLifetimeService(); Retrieve the current lifetime service object that controls the lifetime policy for this instance.
(e.g. var service = request.GetLifetimeService();)
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/create-and-use-your-first-component-in-blazor.html b/_output/create-and-use-your-first-component-in-blazor.html index d11330cc8..b3928f695 100644 --- a/_output/create-and-use-your-first-component-in-blazor.html +++ b/_output/create-and-use-your-first-component-in-blazor.html @@ -1,5 +1,5 @@ -Create and use your first component in Blazor!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Create and use your first component in Blazor!

by George Kosmidis / Published 3 years ago
Create and use your first component in Blazor!

Blazor, the new client-side UI framework from the ASP.NET team, is definitely making a splash among the developers that were trying to avoid the JavaScript coding experience (or even better the debugging JavaScript experience!).

JavaScript flavors ruled successfully the frontend world for so long, that this loved and hated language start infiltrating the backend world with Node.js. Strongly-typed languages fought back, and ASP.NET was the first to introduce a solution: Blazor, an attempt to bring strongly typed C# to the frontend, a breath of fresh air for all strongly-typed language lovers!

In case you like code more than words, visit the WeatherWidget component’s source code in Github.

What is a component in Blazor?

Blazor applications are created using components which are flexible, lightweight, and can be nested, reused, and shared between projects. Components then, are self-contained chunk of user interface (UI), such as a page, dialog, or form.

New to Blazor? That’s a very easy tutorial to get started with: https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/intro?WT.mc_id=DT-MVP-5004591.

Blazor apps are built using Razor components which can contain any combination of Razor, HTML and C# code.

At the end, components are classes like the following, that include both the HTML markup to render along with the processing logic needed to inject data or respond to UI events:

<p>Current count: @currentCount</p>
+Create and use your first component in Blazor!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Create and use your first component in Blazor!

by George Kosmidis / Published 3 years ago
Create and use your first component in Blazor!

Blazor, the new client-side UI framework from the ASP.NET team, is definitely making a splash among the developers that were trying to avoid the JavaScript coding experience (or even better the debugging JavaScript experience!).

JavaScript flavors ruled successfully the frontend world for so long, that this loved and hated language start infiltrating the backend world with Node.js. Strongly-typed languages fought back, and ASP.NET was the first to introduce a solution: Blazor, an attempt to bring strongly typed C# to the frontend, a breath of fresh air for all strongly-typed language lovers!

In case you like code more than words, visit the WeatherWidget component’s source code in Github.

What is a component in Blazor?

Blazor applications are created using components which are flexible, lightweight, and can be nested, reused, and shared between projects. Components then, are self-contained chunk of user interface (UI), such as a page, dialog, or form.

New to Blazor? That’s a very easy tutorial to get started with: https://dotnet.microsoft.com/learn/aspnet/blazor-tutorial/intro?WT.mc_id=DT-MVP-5004591.

Blazor apps are built using Razor components which can contain any combination of Razor, HTML and C# code.

At the end, components are classes like the following, that include both the HTML markup to render along with the processing logic needed to inject data or respond to UI events:

<p>Current count: @currentCount</p>
 
 <button class="btn btn-primary" onclick="@IncrementCount">Click me</button>
 
@@ -468,4 +468,4 @@
     {
         myCityBinding = myCity;
     }
-}

We are done!

A long way after we started, a post with certainly many steps but one that opens up a new possibility for all community nerds out there like me: You can now write and publish your own Blazor Component!

Blazor is here to stay because enables sharing code written in C# between the browser and the server, which means type definitions and data structures can be shared and verified anywhere in the stack. Less code means less bugs which brings security and confidence within a full-stack team.

Code Samples

You can find the samples included in the post as gists here. Additionally, find the code of a fully working weather component in my github account: https://github.com/georgekosmidis/Blazor.WeatherWidget/ and a live sample here: https://blazor-weatherwidget.azurewebsites.net/. Additionally, I also made a Nuget Package out of it

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

We are done!

A long way after we started, a post with certainly many steps but one that opens up a new possibility for all community nerds out there like me: You can now write and publish your own Blazor Component!

Blazor is here to stay because enables sharing code written in C# between the browser and the server, which means type definitions and data structures can be shared and verified anywhere in the stack. Less code means less bugs which brings security and confidence within a full-stack team.

Code Samples

You can find the samples included in the post as gists here. Additionally, find the code of a fully working weather component in my github account: https://github.com/georgekosmidis/Blazor.WeatherWidget/ and a live sample here: https://blazor-weatherwidget.azurewebsites.net/. Additionally, I also made a Nuget Package out of it

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/csharp-10-whats-new.html b/_output/csharp-10-whats-new.html index 5ef091487..533a69c68 100644 --- a/_output/csharp-10-whats-new.html +++ b/_output/csharp-10-whats-new.html @@ -1,5 +1,5 @@ -C# 10 – What’s new!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C# 10 – What’s new!

by George Kosmidis / Published 3 years ago
C# 10 – What’s new!

C# 10 is here with new and exciting feature with an opt-in approach. In this guide we will go through some of the most important changes that will make your code cleaner, smaller, faster and will hopefully convince you to upgrade now!

Microsoft announce C# 10 a few days ago, on November 8th 2021, as part of .NET 6 and Visual Studio 2022 general availability. It cannot be installed on each own and it requires more than .NET 6 (also VS2022) because of the conditional, opt-in, features that were added. If you are not convinced yet by the fact that .NET 6 is the fastest ever .NET which massively lowers hosting costs, let’s take a closer look in C# 10 and you might change your mind!

Global and implicit usings

C# 10 includes a new global using directive and implicit usings to reduce the number of usings you need to specify at the top of each file.

Global using directives

If the keyword global appears prior to a using directive, that using applies to the entire project:

global using System;
+C# 10 – What’s new!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C# 10 – What’s new!

by George Kosmidis / Published 3 years ago
C# 10 – What’s new!

C# 10 is here with new and exciting feature with an opt-in approach. In this guide we will go through some of the most important changes that will make your code cleaner, smaller, faster and will hopefully convince you to upgrade now!

Microsoft announce C# 10 a few days ago, on November 8th 2021, as part of .NET 6 and Visual Studio 2022 general availability. It cannot be installed on each own and it requires more than .NET 6 (also VS2022) because of the conditional, opt-in, features that were added. If you are not convinced yet by the fact that .NET 6 is the fastest ever .NET which massively lowers hosting costs, let’s take a closer look in C# 10 and you might change your mind!

Global and implicit usings

C# 10 includes a new global using directive and implicit usings to reduce the number of usings you need to specify at the top of each file.

Global using directives

If the keyword global appears prior to a using directive, that using applies to the entire project:

global using System;
 global using static System.Console;
 global using Env = System.Environment;

Note that you can use any feature of using within a global using directive.

You can put global using in any .cs file, including Program.cs or a specifically named file like globalusings.cs.

For more information, see global using directives.

Implicit usings

Implicit usings are not exactly implicit, since it’s a feature that automatically adds common global using directives for the type of project you are building. To enable implicit usings set the ImplicitUsings property in your .csproj file:

<PropertyGroup>
     <ImplicitUsings>enable</ImplicitUsings>
@@ -49,4 +49,4 @@
 
 if (obj is Person { Address.City: "Munich" }) // Extended property pattern
     Console.WriteLine("Munich");
-

The extended property pattern simplifies the code and makes it easier to read, particularly when matching against multiple properties.

Find out more about extended property patterns in the pattern matching article.

Not the end!

Although these were by far not all the changes C# 10 brings, they were the most important ones. Install .NET 6 or Visual Studio 2022, and comment out your favorite new feature!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

The extended property pattern simplifies the code and makes it easier to read, particularly when matching against multiple properties.

Find out more about extended property patterns in the pattern matching article.

Not the end!

Although these were by far not all the changes C# 10 brings, they were the most important ones. Install .NET 6 or Visual Studio 2022, and comment out your favorite new feature!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/csharp-9.html b/_output/csharp-9.html index e919651c3..0f4766e6f 100644 --- a/_output/csharp-9.html +++ b/_output/csharp-9.html @@ -1,8 +1,8 @@ C# 9.0

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C# 9.0

by George Kosmidis / Published 4 years and 3 months ago

It may be that .NET 5, the one and only .NET that will clear the confusion and lead the way for the next years was probably the biggest(?) announcement of Microsoft Build 2020, but there were numerous other equally important; from the general availability of the Blazor WebAssembly, the Azure Static Web Apps and all the projects related to IoT and Artificial Intelligence, all the way to .NET MAUI (short for Multi-platform App UI), Visual Studio Codespaces,  Entity Framework Core 5, Project Tye, Azure Quantum and the multiple new features and capabilities of Azure Cosmos DB.

Although there were many more interesting things, C# 9 was left out intentionally because in this post we will deal with some of its exciting new features!

init accessor

Up until C# 9, in order to use the object initializer syntax the properties of that object had to be mutable, which means they could change anywhere in the code even after object initialization. In other words, there was no way to use object initilizer on immutable properties, or even better a property had to be publicly accessible to use object initializer:

//In C# 8, a mutable object like the following allowed object initializer syntax
+ Although there were many more interesting things, C# 9 was left out intentionally because in this post we will deal with some of its exciting new features!">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C# 9.0

by George Kosmidis / Published 4 years and 3 months ago

It may be that .NET 5, the one and only .NET that will clear the confusion and lead the way for the next years was probably the biggest(?) announcement of Microsoft Build 2020, but there were numerous other equally important; from the general availability of the Blazor WebAssembly, the Azure Static Web Apps and all the projects related to IoT and Artificial Intelligence, all the way to .NET MAUI (short for Multi-platform App UI), Visual Studio Codespaces,  Entity Framework Core 5, Project Tye, Azure Quantum and the multiple new features and capabilities of Azure Cosmos DB.

Although there were many more interesting things, C# 9 was left out intentionally because in this post we will deal with some of its exciting new features!

init accessor

Up until C# 9, in order to use the object initializer syntax the properties of that object had to be mutable, which means they could change anywhere in the code even after object initialization. In other words, there was no way to use object initilizer on immutable properties, or even better a property had to be publicly accessible to use object initializer:

//In C# 8, a mutable object like the following allowed object initializer syntax
 public class Person
 {
     public string FirstName { get; set; }
@@ -215,4 +215,4 @@
       <= 1 => ExperienceLevel.Low,
       > 1 and <= 5 => ExperienceLevel.Medium,
       _ => ExperienceLevel.High,
-  };

There are more…!

Here is a list of all the features coming to C# 9!

I didn’t write this list on my own, I took it from the Language Feature Status!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file + };

There are more…!

Here is a list of all the features coming to C# 9!

I didn’t write this list on my own, I took it from the Language Feature Status!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/customize-the-azure-sdk-for-js.html b/_output/customize-the-azure-sdk-for-js.html index 01fbb51f6..9175f9a71 100644 --- a/_output/customize-the-azure-sdk-for-js.html +++ b/_output/customize-the-azure-sdk-for-js.html @@ -1,5 +1,5 @@ -How to Build and Customize the Azure SDK for JavaScript

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

How to Build and Customize the Azure SDK for JavaScript

by George Kosmidis / Published 2 months and 1 week ago
How to Build and Customize the Azure SDK for JavaScript

How to Build and Customize the Azure SDK for JavaScript: A Step-by-Step Guide

As a developer working with Azure services, you might find yourself needing to build and customize the Azure SDK to test a preview version of an Azure API that isn't yet available in the SDK. Sure, you could just use Postman, but where's the fun in that? :) Whether you're looking to make enhancements or support a new version that hasn't been officially released yet, having a clear set of instructions can save you a lot of time and hassle. In this post, we'll walk you through the process, from setting up your environment to pushing your custom changes to a forked repository.

Prerequisites

Before we dive into the build process, make sure you have the following tools installed:

  1. Visual Studio 2022: Ensure that the "Desktop development with C++" workload is included. While you can continue using VS Code for development, Visual Studio just needs to be installed, even if it's buried somewhere on your drive.
  2. Python 3.9.13: If you're using a different version of Python, pyenv is a handy tool to manage multiple versions.
  3. Node 18.20.3: Similarly, if you need to manage multiple Node versions, try nvm.

Step 1: Forking and Making Changes

If you need to fork the repository, make custom changes, and then build it, follow these steps:

  1. Clone the Repository:

    git clone https://github.com/Azure/azure-sdk-for-js.git
    +How to Build and Customize the Azure SDK for JavaScript

    George Kosmidis

    Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
    Building tomorrow @
    slalom
    slalom

    How to Build and Customize the Azure SDK for JavaScript

    by George Kosmidis / Published 2 months and 1 week ago
    How to Build and Customize the Azure SDK for JavaScript

    How to Build and Customize the Azure SDK for JavaScript: A Step-by-Step Guide

    As a developer working with Azure services, you might find yourself needing to build and customize the Azure SDK to test a preview version of an Azure API that isn't yet available in the SDK. Sure, you could just use Postman, but where's the fun in that? :) Whether you're looking to make enhancements or support a new version that hasn't been officially released yet, having a clear set of instructions can save you a lot of time and hassle. In this post, we'll walk you through the process, from setting up your environment to pushing your custom changes to a forked repository.

    Prerequisites

    Before we dive into the build process, make sure you have the following tools installed:

    1. Visual Studio 2022: Ensure that the "Desktop development with C++" workload is included. While you can continue using VS Code for development, Visual Studio just needs to be installed, even if it's buried somewhere on your drive.
    2. Python 3.9.13: If you're using a different version of Python, pyenv is a handy tool to manage multiple versions.
    3. Node 18.20.3: Similarly, if you need to manage multiple Node versions, try nvm.

    Step 1: Forking and Making Changes

    If you need to fork the repository, make custom changes, and then build it, follow these steps:

    1. Clone the Repository:

      git clone https://github.com/Azure/azure-sdk-for-js.git
       cd azure-sdk-for-js
       
    2. Check Out a Specific Tag (Optional):

      git checkout tags/@azure/ai-form-recognizer_5.0.0 -b ai-form-recognizer_5.0.0
       
    3. Make Your Changes: Open the code in your favorite editor and make the necessary modifications.

    4. Push Changes to Your Fork (Optional):

      • Add a remote for your fork:
        git remote add fork https://github.com/<your-username>/azure-sdk-for-js.git
        @@ -14,4 +14,4 @@
         rush build -t @azure/ai-form-recognizer
         

        This will build the specific package for the AI Form Recognizer.

        Step 4: Building the AI Form Recognizer Package

        Navigate to the AI Form Recognizer package directory and pack the module:

        cd .\sdk\formrecognizer\ai-form-recognizer
         npm pack
        -

        After running this command, you should have a file named azure-ai-form-recognizer-5.0.0.tgz. Copy this file to a location of your choice for later use. `

        That's it!

        By following these steps, you'll be able to set up your development environment, build the SDK, make custom modifications, and push your changes to your forked repository. Happy coding!

        Feel free to leave comments or ask questions if you run into any issues!

    This page is open source. Noticed a typo? Or something unclear?
    Edit Page Create Issue Discuss
    Microsoft MVP - George Kosmidis
    Azure Architecture Icons - SVGs, PNGs and draw.io libraries
     
\ No newline at end of file +

After running this command, you should have a file named azure-ai-form-recognizer-5.0.0.tgz. Copy this file to a location of your choice for later use. `

That's it!

By following these steps, you'll be able to set up your development environment, build the SDK, make custom modifications, and push your changes to your forked repository. Happy coding!

Feel free to leave comments or ask questions if you run into any issues!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/deploy-an-azure-logic-apps-workflow-in-standard-plan-with-azure-devops.html b/_output/deploy-an-azure-logic-apps-workflow-in-standard-plan-with-azure-devops.html index 2001ee4d5..11a67f3d0 100644 --- a/_output/deploy-an-azure-logic-apps-workflow-in-standard-plan-with-azure-devops.html +++ b/_output/deploy-an-azure-logic-apps-workflow-in-standard-plan-with-azure-devops.html @@ -1,5 +1,5 @@ -Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

by George Kosmidis / Published 3 days ago
Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

In this article, we’ll explore how to automate the deployment of workflows in Azure Logic Apps using the Azure CLI. We’ll cover a scenario where multiple workflows are organized in subfolders, and we’ll use a simple Bash script to zip each workflow and deploy it programmatically.

Introduction

Azure Logic Apps is a cloud service that helps you automate workflows that integrate apps, data, services, and systems. When working with the Standard Plan, you may need to deploy multiple workflows in a structured and automated way. This guide will show you how to use the Azure CLI to deploy workflows in bulk by zipping each one and pushing it to your Azure environment.

Pre-requisites

Before we dive into the solution, ensure you have the following:

  • An active Azure subscription.
  • The Azure CLI installed on your local machine for testing.
  • A service connection in Azure DevOps, if you're using it.

Step-by-Step Guide

1. Organizing Your Logic App Workflows

Your Logic App Workflows should be structured in a folder. Each workflow should have its own subfolder under a main directory (e.g., ./mylogicapp/workflows/sample_workflow). Inside each subfolder, the Logic App's workflow files should be present.

Example Directory Structure:

mylogicapp/
+Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

by George Kosmidis / Published 3 days ago
Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

In this article, we’ll explore how to automate the deployment of workflows in Azure Logic Apps using the Azure CLI. We’ll cover a scenario where multiple workflows are organized in subfolders, and we’ll use a simple Bash script to zip each workflow and deploy it programmatically.

Introduction

Azure Logic Apps is a cloud service that helps you automate workflows that integrate apps, data, services, and systems. When working with the Standard Plan, you may need to deploy multiple workflows in a structured and automated way. This guide will show you how to use the Azure CLI to deploy workflows in bulk by zipping each one and pushing it to your Azure environment.

Pre-requisites

Before we dive into the solution, ensure you have the following:

  • An active Azure subscription.
  • The Azure CLI installed on your local machine for testing.
  • A service connection in Azure DevOps, if you're using it.

Step-by-Step Guide

1. Organizing Your Logic App Workflows

Your Logic App Workflows should be structured in a folder. Each workflow should have its own subfolder under a main directory (e.g., ./mylogicapp/workflows/sample_workflow). Inside each subfolder, the Logic App's workflow files should be present.

Example Directory Structure:

mylogicapp/
   └─ workflows/
       ├─ workflow1/
       ├─ workflow2/
@@ -48,4 +48,4 @@
           echo "Deployed $folder_name logic app using $zip_file"
         fi
       done
-

5. Troubleshooting and Tips

  • Permissions: Make sure your service principal or Azure DevOps service connection has sufficient permissions to deploy Logic Apps in the target resource group.
  • Error Handling: You may want to add error handling in the script to handle scenarios where the deployment fails.
  • Naming Conventions: Ensure that the names of your Logic Apps and their subfolders are consistent and unique.

Further Reading

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

5. Troubleshooting and Tips

Further Reading

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/docker-cheatsheet-for-dotnet-core.html b/_output/docker-cheatsheet-for-dotnet-core.html index 56e78bfb9..d2219957b 100644 --- a/_output/docker-cheatsheet-for-dotnet-core.html +++ b/_output/docker-cheatsheet-for-dotnet-core.html @@ -1,5 +1,5 @@ -Docker cheatsheet for .NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Docker cheatsheet for .NET Core

by George Kosmidis / Published 4 years and 3 months ago, modified 3 years and 5 months ago
Docker cheatsheet for .NET Core

This is just a cheat sheet of commands and terminology for Docker and ASP.NET Core; it contains commands that you can find in the original cheat sheet, plus a Dockerfile for ASP.NET Core and a quick guide on how to created one from Visual Studio. Hopefully, both developers that are in the process of getting into the containerize world with Docker and developers that are already in but need a quick recap will find it useful.

Basic terminology

TermShort explanation
Docker Docker is a set of platform as a service products that uses OS-level virtualization to deliver software in packages called containers. Download Docker for Windows here.
Image An image, or more correct, a Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
Container A container image becomes a container at runtime when they run on Docker Engine
Docker Engine Docker Engine is a container runtime that runs on various Linux (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE, and Ubuntu) and Windows Server operating systems…
Docker Hub Docker Hub is a service provided by Docker for finding and sharing container images with your team.
Dockerfile A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.

Read more information about Docker Container Images and Docker Containers here.

Basic commands

Follows, a list of basic commands that you will regularly need. Run them using command line from the root of your application – where the Dockerfile should exists.

TermShort explanation
docker pull Retrieve an image from a registry. If you specify only the repository name, Docker will download the image tagged latest from that repository on Docker Hub.
e.g. docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 pulls the 3.1 runtime, where docker pull mcr.microsoft.com/dotnet/core/sdk pulls the latest .NET Core SDK.
docker build Create a new image by running a Dockerfile. User the -t flag to specify the name of the new image and don’t forget the . (build context for the source files for the COPY command)
e.g. docker build -t image.name.for.my.app:v1 .
docker image list After pulling an image, view the images in your local registry with the docker image list command.
docker ps View active containers. Use the -a flag to view all.
e.g. docker ps -a
docker run Run an image – it will become a container. Specify the option -p for port mapping (left hand side local port, right hand side port exposed by docker) and -d to run it as a background service.
Speficy the --name option to set the name of the container.
e.g. docker run -p 8080:80 -d --name container.name image.name.for.my.app
docker stop Stop an active container by specifying the container ID. Get that with the docker ps command
e.g. docker stop elegant_ramanujan
docker start Restart a stopped container.
e.g. docker start elegant_ramanujan
docker container rm Remove a stopped container. Add the -f flag to force remove a running container (not a graceful shutdown)
e.g. docker container rm -f elegant_ramanujan
docker image rm Remove an image. There is no force flag here, all containers using this image must be stopped.
e.g. docker image rm mcr.microsoft.com/dotnet/core/samples:aspnetapp

A Dockerfile sample

Living in the root of the application, a Dockerfile is just a plain text file; you can either use the following command to create it in Windows, or anyway you like: copy NUL Dockerfile. The sample below contains everything necessary to build and run an image. Comments above each command attempt to provide a bit of clarity:

# This is a sample Dockerfile for building and running ASP.NET Core applications 
+Docker cheatsheet for .NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Docker cheatsheet for .NET Core

by George Kosmidis / Published 4 years and 3 months ago, modified 3 years and 5 months ago
Docker cheatsheet for .NET Core

This is just a cheat sheet of commands and terminology for Docker and ASP.NET Core; it contains commands that you can find in the original cheat sheet, plus a Dockerfile for ASP.NET Core and a quick guide on how to created one from Visual Studio. Hopefully, both developers that are in the process of getting into the containerize world with Docker and developers that are already in but need a quick recap will find it useful.

Basic terminology

TermShort explanation
Docker Docker is a set of platform as a service products that uses OS-level virtualization to deliver software in packages called containers. Download Docker for Windows here.
Image An image, or more correct, a Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
Container A container image becomes a container at runtime when they run on Docker Engine
Docker Engine Docker Engine is a container runtime that runs on various Linux (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE, and Ubuntu) and Windows Server operating systems…
Docker Hub Docker Hub is a service provided by Docker for finding and sharing container images with your team.
Dockerfile A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image.

Read more information about Docker Container Images and Docker Containers here.

Basic commands

Follows, a list of basic commands that you will regularly need. Run them using command line from the root of your application – where the Dockerfile should exists.

TermShort explanation
docker pull Retrieve an image from a registry. If you specify only the repository name, Docker will download the image tagged latest from that repository on Docker Hub.
e.g. docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1 pulls the 3.1 runtime, where docker pull mcr.microsoft.com/dotnet/core/sdk pulls the latest .NET Core SDK.
docker build Create a new image by running a Dockerfile. User the -t flag to specify the name of the new image and don’t forget the . (build context for the source files for the COPY command)
e.g. docker build -t image.name.for.my.app:v1 .
docker image list After pulling an image, view the images in your local registry with the docker image list command.
docker ps View active containers. Use the -a flag to view all.
e.g. docker ps -a
docker run Run an image – it will become a container. Specify the option -p for port mapping (left hand side local port, right hand side port exposed by docker) and -d to run it as a background service.
Speficy the --name option to set the name of the container.
e.g. docker run -p 8080:80 -d --name container.name image.name.for.my.app
docker stop Stop an active container by specifying the container ID. Get that with the docker ps command
e.g. docker stop elegant_ramanujan
docker start Restart a stopped container.
e.g. docker start elegant_ramanujan
docker container rm Remove a stopped container. Add the -f flag to force remove a running container (not a graceful shutdown)
e.g. docker container rm -f elegant_ramanujan
docker image rm Remove an image. There is no force flag here, all containers using this image must be stopped.
e.g. docker image rm mcr.microsoft.com/dotnet/core/samples:aspnetapp

A Dockerfile sample

Living in the root of the application, a Dockerfile is just a plain text file; you can either use the following command to create it in Windows, or anyway you like: copy NUL Dockerfile. The sample below contains everything necessary to build and run an image. Comments above each command attempt to provide a bit of clarity:

# This is a sample Dockerfile for building and running ASP.NET Core applications 
 # This is part of the cheat sheet at https://blog.georgekosmidis.net/2020/06/12/docker-cheat-sheet-for-dotnet-core/
 
 # Pull ASP.NET Core 3.1 runtime and give the name 'base'
@@ -45,4 +45,4 @@
  
 # Set the entry point, in other words, what to run!
 # More on the 'ENTRYPOINT' instruction here https://docs.docker.com/engine/reference/builder/#entrypoint
-ENTRYPOINT ["dotnet", "Name.Of.Your.Project.dll"]

A cheat with Microsoft Visual Studio

If it happens to have a Visual Studio around, just right click on your main project, select ‘Add’ and then ‘Docker Support…’:

Docker Support in Microsoft Visual Studio 2019
Docker Support in Microsoft Visual Studio 2019

Usually, for ASP.NET Core, I choose ‘Linux’ as Operating System; at the end it comes cheaper if you want to host it, for example, in Azure.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +ENTRYPOINT ["dotnet", "Name.Of.Your.Project.dll"]

A cheat with Microsoft Visual Studio

If it happens to have a Visual Studio around, just right click on your main project, select ‘Add’ and then ‘Docker Support…’:

Docker Support in Microsoft Visual Studio 2019
Docker Support in Microsoft Visual Studio 2019

Usually, for ASP.NET Core, I choose ‘Linux’ as Operating System; at the end it comes cheaper if you want to host it, for example, in Azure.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/dotnet-aspire.html b/_output/dotnet-aspire.html index beef43eae..083697408 100644 --- a/_output/dotnet-aspire.html +++ b/_output/dotnet-aspire.html @@ -1,5 +1,5 @@ -.NET Aspire

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

.NET Aspire

by George Kosmidis / Published 1 year ago
.NET Aspire

Table of Contents

Introduction

.NET Aspire is presented as a forward-thinking, opinionated stack designed specifically for the development of distributed applications that are ready for the cloud environment. It emphasizes the creation of applications that are not only prepared for production but also equipped with built-in observability features. This focus on cloud readiness and observability from the outset demonstrates .NET Aspire's commitment to meeting the demands of modern, distributed application development, making it an essential tool for developers looking to excel in the cloud-native ecosystem.

.NET Aspire significantly simplifies the development of observable, production-ready applications. Its design incorporates best practices and patterns that enable developers to focus on building their application's core functionality while benefiting from the framework's robust support for observability and production readiness. This approach reduces complexity and accelerates the development process, allowing teams to deliver high-quality, cloud-native applications more efficiently.

Simplifying Distributed App Development

.NET Aspire simplifies the development of distributed applications through its orchestration, components, and tooling by providing a unified and simplified approach to handling common cloud-native concerns:

  • Service Discovery: .NET Aspire automates the discovery of services within an application, allowing components to communicate seamlessly without hard-coding service locations or details. This simplification is achieved through the orchestration layer, which manages the injection of connection strings and service discovery information.

  • Persistence: Components designed for data storage and retrieval, such as those for PostgreSQL or Redis, offer simplified access to databases and caching systems. They come with standardized configuration patterns, including support for health checks and telemetry, which eases the integration and management of data services in cloud-native applications.

  • Health Checks: .NET Aspire components can include built-in health checks, ensuring that applications can monitor the status and health of each component and service. This feature is critical for maintaining the reliability and availability of distributed applications, especially in cloud environments where services may be dynamically scaled or replaced.

Prerequisites

To set up the .NET Aspire environment, follow these prerequisites and steps:

  • Install .NET 8.0 on your local machine.
  • Install Docker Desktop, as some components, like Redis for caching, require Docker.
  • Have an Integrated Development Environment (IDE) or code editor, such as Visual Studio 2022 (Preview version 17.9 or higher) or Visual Studio Code.
  • For Visual Studio users, Visual Studio 2022 (17.10 Preview 1 or higher) includes the .NET Aspire preview 3 workload by default. You can verify or install this workload via the Visual Studio installer.
  • For users preferring command-line tools or Visual Studio Code, install the .NET Aspire workload using the .NET CLI with the command dotnet workload install aspire.

Quickstart Guide to Building the First .NET Aspire Application

To create and run your first .NET Aspire application, you can use either Visual Studio or the .NET CLI. Here's a quick guide for both methods:

Using Visual Studio:

  1. Navigate to File > New > Project.
  2. Search for "Aspire" in the dialog window, select .NET Aspire Starter Application, and click Next.
  3. Configure your new project by entering a project name (e.g., AspireSample) and leave the rest of the values at their defaults. Select Next.
  4. Ensure .NET 8.0 (Long Term Support) is selected, and check Use Redis for caching (requires Docker). Click Create.
  5. Visual Studio will create a new solution structured to use .NET Aspire, including projects for API services, AppHost, ServiceDefaults, and a Blazor App project.

Using the .NET CLI:

  1. Open a terminal and run the command to create a new .NET Aspire application with Redis cache:
    dotnet new aspire-starter --use-redis-cache -o AspireAzdWalkthrough
    +.NET Aspire

    George Kosmidis

    Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
    Building tomorrow @
    slalom
    slalom

    .NET Aspire

    by George Kosmidis / Published 1 year ago
    .NET Aspire

    Table of Contents

    Introduction

    .NET Aspire is presented as a forward-thinking, opinionated stack designed specifically for the development of distributed applications that are ready for the cloud environment. It emphasizes the creation of applications that are not only prepared for production but also equipped with built-in observability features. This focus on cloud readiness and observability from the outset demonstrates .NET Aspire's commitment to meeting the demands of modern, distributed application development, making it an essential tool for developers looking to excel in the cloud-native ecosystem.

    .NET Aspire significantly simplifies the development of observable, production-ready applications. Its design incorporates best practices and patterns that enable developers to focus on building their application's core functionality while benefiting from the framework's robust support for observability and production readiness. This approach reduces complexity and accelerates the development process, allowing teams to deliver high-quality, cloud-native applications more efficiently.

    Simplifying Distributed App Development

    .NET Aspire simplifies the development of distributed applications through its orchestration, components, and tooling by providing a unified and simplified approach to handling common cloud-native concerns:

    • Service Discovery: .NET Aspire automates the discovery of services within an application, allowing components to communicate seamlessly without hard-coding service locations or details. This simplification is achieved through the orchestration layer, which manages the injection of connection strings and service discovery information.

    • Persistence: Components designed for data storage and retrieval, such as those for PostgreSQL or Redis, offer simplified access to databases and caching systems. They come with standardized configuration patterns, including support for health checks and telemetry, which eases the integration and management of data services in cloud-native applications.

    • Health Checks: .NET Aspire components can include built-in health checks, ensuring that applications can monitor the status and health of each component and service. This feature is critical for maintaining the reliability and availability of distributed applications, especially in cloud environments where services may be dynamically scaled or replaced.

    Prerequisites

    To set up the .NET Aspire environment, follow these prerequisites and steps:

    • Install .NET 8.0 on your local machine.
    • Install Docker Desktop, as some components, like Redis for caching, require Docker.
    • Have an Integrated Development Environment (IDE) or code editor, such as Visual Studio 2022 (Preview version 17.9 or higher) or Visual Studio Code.
    • For Visual Studio users, Visual Studio 2022 (17.10 Preview 1 or higher) includes the .NET Aspire preview 3 workload by default. You can verify or install this workload via the Visual Studio installer.
    • For users preferring command-line tools or Visual Studio Code, install the .NET Aspire workload using the .NET CLI with the command dotnet workload install aspire.

    Quickstart Guide to Building the First .NET Aspire Application

    To create and run your first .NET Aspire application, you can use either Visual Studio or the .NET CLI. Here's a quick guide for both methods:

    Using Visual Studio:

    1. Navigate to File > New > Project.
    2. Search for "Aspire" in the dialog window, select .NET Aspire Starter Application, and click Next.
    3. Configure your new project by entering a project name (e.g., AspireSample) and leave the rest of the values at their defaults. Select Next.
    4. Ensure .NET 8.0 (Long Term Support) is selected, and check Use Redis for caching (requires Docker). Click Create.
    5. Visual Studio will create a new solution structured to use .NET Aspire, including projects for API services, AppHost, ServiceDefaults, and a Blazor App project.

    Using the .NET CLI:

    1. Open a terminal and run the command to create a new .NET Aspire application with Redis cache:
      dotnet new aspire-starter --use-redis-cache -o AspireAzdWalkthrough
       
    2. Change into the project directory:
      cd AspireAzdWalkthrough
       
    3. Run the project specifying the AppHost project:
      dotnet run --project AspireAzdWalkthrough.AppHost\AspireAzdWalkthrough.AppHost.csproj
       

    This set of commands will create and run a new .NET Aspire application based on the aspire-starter template, which includes a dependency on Redis cache.

    Diving into Orchestration, Components, and Tooling in .NET Aspire

    Orchestration in .NET Aspire involves the coordination and management of various elements within a cloud-native application, aiming to streamline the configuration and interconnection of different parts of your application. It provides abstractions for managing service discovery, environment variables, and container configurations without delving into low-level details. This leads to consistent setup patterns across applications with multiple components and service.

    Orchestration helps with app composition by specifying .NET projects, containers, executables, and cloud resources that make up the application. It simplifies service discovery and connection string management by managing the injection of the correct connection strings and service discovery information, enhancing the developer experience.

    A practical example includes creating a local Redis container resource and configuring the appropriate connection string in a project with minimal code:

    // Orchestration example
    @@ -106,4 +106,4 @@
       "APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=12345678-abcd-1234-abcd-1234abcd5678;IngestionEndpoint=https://westus3-1.in.applicationinsights.azure.com"?WT.mc_id=DT-MVP-5004591
     }
     

    Lastly, include the Azure Monitor Exporter package in your ServiceDefaults project to ensure it is available across all .NET Aspire applications:

    <PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="[SelectVersion]" />
    -

    This integration approach outlines the critical steps for deploying .NET Aspire applications to Azure, utilizing ACA for hosting, and enhancing telemetry and observability with Application Insights. It underscores the synergy between Azure services and .NET Aspire, promoting a cloud-native development paradigm while ensuring robust monitoring and analytical capabilities essential for cloud-based applications.

    Adding .NET Aspire in an existing app

    To add .NET Aspire to an existing .NET 8 microservices application, follow these steps to harness its benefits of .NET Aspire, including service orchestration and enhanced telemetry:

    Adding .NET Aspire Orchestration

    1. Enroll the Store Project: Right-click on your main project in Solution Explorer, select Add, and then choose .NET Aspire Orchestrator Support. Confirm any dialogs that appear to proceed with the addition.

    2. Enroll Other Projects: Similarly, add .NET Aspire support to other projects within your solution that you wish to be part of the orchestration. This might include backend services, APIs, or any other project types relevant to your application.

    After adding .NET Aspire to your projects, Visual Studio will automatically add two new projects to your solution:

    • AppHost: An orchestrator project to connect and configure the different projects and services.
    • ServiceDefaults: A shared project to manage configurations reused across the solution, related to resilience, service discovery, and telemetry.

    Configuring the AppHost

    1. Configure Service Registration: In the Program.cs file of your AppHost project, register the projects you've added to .NET Aspire orchestration using the services.AddProject<Projects.YourProject>("yourProject") method, where YourProject is the project name, and "yourProject" is the identifier used in the orchestration.

    2. Start the Application: Debug the solution in Visual Studio to see the effects of .NET Aspire orchestration. Ensure Docker Desktop is running, as it might be required for services that use containerization.

    3. Verify Orchestration and Service Discovery: Access the .NET Aspire dashboard that appears upon running the application to verify that your services are correctly registered and discoverable within the orchestration framework.

    By following these steps, you integrate .NET Aspire into your existing microservices application, leveraging its orchestration capabilities, enhanced security, and observability features.

    Conclusion

    .NET Aspire has emerged as a transformative stack for cloud-native application development, offering tools and patterns that align with the needs of modern distributed systems. Through a blend of orchestration, componentization, and comprehensive tooling, it streamlines the creation of observable, production-ready applications, setting developers on a path from novice to expert in the cloud-native landscape. By leveraging .NET Aspire, developers can focus on delivering value through their applications, confident in the stack's capabilities to handle the complexities of cloud-native development efficiently. This journey encapsulates the essence of evolving with .NET Aspire: embracing innovation, enhancing skills, and contributing to the future of cloud-ready applications.

    Resources

    For those interested in .NET Aspire and looking for related content, here are some useful links to GitHub repositories and documentation:

    1. .NET Aspire Repository: This is the main GitHub repository for .NET Aspire, where you can find all related components, documentation, and contribution guidelines.

    2. .NET Aspire Samples: A repository dedicated to providing samples for .NET Aspire, showcasing various applications and implementations to help you get started.

    3. .NET Aspire Documentation: This repository contains the documentation for .NET Aspire, offering in-depth information on how to use, extend, and deploy .NET Aspire applications.

    This page is open source. Noticed a typo? Or something unclear?
    Edit Page Create Issue Discuss
    Microsoft MVP - George Kosmidis
    Azure Architecture Icons - SVGs, PNGs and draw.io libraries
     
\ No newline at end of file +

This integration approach outlines the critical steps for deploying .NET Aspire applications to Azure, utilizing ACA for hosting, and enhancing telemetry and observability with Application Insights. It underscores the synergy between Azure services and .NET Aspire, promoting a cloud-native development paradigm while ensuring robust monitoring and analytical capabilities essential for cloud-based applications.

Adding .NET Aspire in an existing app

To add .NET Aspire to an existing .NET 8 microservices application, follow these steps to harness its benefits of .NET Aspire, including service orchestration and enhanced telemetry:

Adding .NET Aspire Orchestration

  1. Enroll the Store Project: Right-click on your main project in Solution Explorer, select Add, and then choose .NET Aspire Orchestrator Support. Confirm any dialogs that appear to proceed with the addition.

  2. Enroll Other Projects: Similarly, add .NET Aspire support to other projects within your solution that you wish to be part of the orchestration. This might include backend services, APIs, or any other project types relevant to your application.

After adding .NET Aspire to your projects, Visual Studio will automatically add two new projects to your solution:

Configuring the AppHost

  1. Configure Service Registration: In the Program.cs file of your AppHost project, register the projects you've added to .NET Aspire orchestration using the services.AddProject<Projects.YourProject>("yourProject") method, where YourProject is the project name, and "yourProject" is the identifier used in the orchestration.

  2. Start the Application: Debug the solution in Visual Studio to see the effects of .NET Aspire orchestration. Ensure Docker Desktop is running, as it might be required for services that use containerization.

  3. Verify Orchestration and Service Discovery: Access the .NET Aspire dashboard that appears upon running the application to verify that your services are correctly registered and discoverable within the orchestration framework.

By following these steps, you integrate .NET Aspire into your existing microservices application, leveraging its orchestration capabilities, enhanced security, and observability features.

Conclusion

.NET Aspire has emerged as a transformative stack for cloud-native application development, offering tools and patterns that align with the needs of modern distributed systems. Through a blend of orchestration, componentization, and comprehensive tooling, it streamlines the creation of observable, production-ready applications, setting developers on a path from novice to expert in the cloud-native landscape. By leveraging .NET Aspire, developers can focus on delivering value through their applications, confident in the stack's capabilities to handle the complexities of cloud-native development efficiently. This journey encapsulates the essence of evolving with .NET Aspire: embracing innovation, enhancing skills, and contributing to the future of cloud-ready applications.

Resources

For those interested in .NET Aspire and looking for related content, here are some useful links to GitHub repositories and documentation:

  1. .NET Aspire Repository: This is the main GitHub repository for .NET Aspire, where you can find all related components, documentation, and contribution guidelines.

  2. .NET Aspire Samples: A repository dedicated to providing samples for .NET Aspire, showcasing various applications and implementations to help you get started.

  3. .NET Aspire Documentation: This repository contains the documentation for .NET Aspire, offering in-depth information on how to use, extend, and deploy .NET Aspire applications.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/durable-functions-starting-with-serverless-stateful-orchestrations-in-azure.html b/_output/durable-functions-starting-with-serverless-stateful-orchestrations-in-azure.html index 94aa6258a..76ba462f5 100644 --- a/_output/durable-functions-starting-with-serverless-stateful-orchestrations-in-azure.html +++ b/_output/durable-functions-starting-with-serverless-stateful-orchestrations-in-azure.html @@ -1,5 +1,5 @@ -Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

by George Kosmidis / Published 1 year and 5 months ago
Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Table of Contents

Introduction to Serverless Computing

Serverless computing is a cloud computing execution model where the cloud provider dynamically manages the allocation and provisioning of servers. A serverless application runs in stateless compute containers that are event-triggered, ephemeral (may last for one invocation), and fully managed by the cloud provider. This means developers can focus on their code without worrying about the underlying infrastructure.

The primary benefits of serverless computing include:

  • Cost Efficiency: You only pay for the compute time you consume, down to the nearest 100 milliseconds, making it highly cost-effective.
  • Scalability: Automatically scales your application by running code in response to each trigger.
  • Simplified Operations: Eliminates the need to manage servers, leading to faster development cycles.

Serverless Computing on Azure

Azure Functions is Microsoft's answer to serverless computing. It allows developers to write less code, maintain less infrastructure, and save on costs. In essence, Azure Functions is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure.

Key Features of Azure Functions:

  • Event-driven: You can trigger functions from a variety of events, including HTTP requests, queue messages, and more.
  • Integrated Security: Protect your functions with oAuth providers such as Azure Entra.
  • Programming Language Support: Write functions using your choice of C#, Java, JavaScript, TypeScript, and Python.
  • Scalability: Azure Functions scale automatically based on demand, so your code always has the resources it needs to run, but you're only charged for the exact amount of resources your functions use.

Example: A Simple HTTP-triggered Azure Function

Let’s look at a simple example of an Azure Function that's triggered by an HTTP request. This function will return a personalized greeting to the user.

using Microsoft.AspNetCore.Mvc;
+Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

by George Kosmidis / Published 1 year and 5 months ago
Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Table of Contents

Introduction to Serverless Computing

Serverless computing is a cloud computing execution model where the cloud provider dynamically manages the allocation and provisioning of servers. A serverless application runs in stateless compute containers that are event-triggered, ephemeral (may last for one invocation), and fully managed by the cloud provider. This means developers can focus on their code without worrying about the underlying infrastructure.

The primary benefits of serverless computing include:

  • Cost Efficiency: You only pay for the compute time you consume, down to the nearest 100 milliseconds, making it highly cost-effective.
  • Scalability: Automatically scales your application by running code in response to each trigger.
  • Simplified Operations: Eliminates the need to manage servers, leading to faster development cycles.

Serverless Computing on Azure

Azure Functions is Microsoft's answer to serverless computing. It allows developers to write less code, maintain less infrastructure, and save on costs. In essence, Azure Functions is a serverless compute service that enables you to run code on-demand without having to explicitly provision or manage infrastructure.

Key Features of Azure Functions:

  • Event-driven: You can trigger functions from a variety of events, including HTTP requests, queue messages, and more.
  • Integrated Security: Protect your functions with oAuth providers such as Azure Entra.
  • Programming Language Support: Write functions using your choice of C#, Java, JavaScript, TypeScript, and Python.
  • Scalability: Azure Functions scale automatically based on demand, so your code always has the resources it needs to run, but you're only charged for the exact amount of resources your functions use.

Example: A Simple HTTP-triggered Azure Function

Let’s look at a simple example of an Azure Function that's triggered by an HTTP request. This function will return a personalized greeting to the user.

using Microsoft.AspNetCore.Mvc;
 using Microsoft.Azure.WebJobs;
 using Microsoft.Azure.WebJobs.Extensions.Http;
 using Microsoft.AspNetCore.Http;
@@ -150,4 +150,4 @@
 
     return isServiceUp;
 }
-

By adapting this example, you can monitor virtually any external service or endpoint, customizing the check frequency, handling logic, and alerting mechanisms to suit your specific requirements.

Human Interaction: Managing Workflows That Require Human Intervention or Approval

Durable Functions, an extension of Azure Functions, allows developers to build complex orchestration workflows in a serverless environment. A significant capability of these orchestrations is managing processes that require human intervention or approval. This functionality is crucial for workflows where a decision or action by a person is needed before the process can proceed.

Understanding Human Interaction in Workflows

Human interactions in automated workflows typically involve pausing the workflow until an external input is received. This could be an approval from a manager, feedback from a client, or a manual review of generated content. Durable Functions handle these scenarios through external events.

Implementing Human Interaction

To implement a workflow that requires human intervention in Durable Functions:

  1. Start with an Orchestrator Function: This function coordinates the workflow, including the wait for human input.

  2. Use External Events for Pausing and Resuming: The orchestrator function can pause its execution waiting for an external event. This event represents the human action, such as an approval.

  3. Sending Approval Requests: Typically, an activity function sends an approval request to a human via email or a web interface. This message includes a way to send the approval back, often through a secure link that triggers another Azure Function.

  4. Waiting for Approval: The orchestrator function waits for the external event triggered by human action. This is done using the waitForExternalEvent method, which effectively pauses the workflow until the specified event is received.

  5. Resuming the Workflow: Once the external event (e.g., approval) is received, the orchestrator function continues, executing the next steps in the workflow based on the input received from the human interaction.

Handling Timeouts

In real-world scenarios, human actions may not be immediate. Durable Functions allows setting a timeout for the wait. If the human action is not received within the timeout period, the workflow can proceed with a default action, escalate the issue, or retry the request.

Example Scenario: Document Approval Process

Consider a document approval process where a document generated by a system needs to be reviewed and approved by a manager before it is finalized:

  • Step 1: The orchestrator function starts the workflow, generating the document and sending a notification to the manager for approval.
  • Step 2: The workflow waits for the manager's approval, pausing execution until an external event signals the manager's decision.
  • Step 3: Upon receiving approval (the external event), the workflow resumes, finalizing the document and proceeding to the next steps, such as notifying stakeholders or archiving the document.

Resources and Further Reading

Official Documentation and Tutorials

Community Resources, Forums, and Blogs

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

By adapting this example, you can monitor virtually any external service or endpoint, customizing the check frequency, handling logic, and alerting mechanisms to suit your specific requirements.

Human Interaction: Managing Workflows That Require Human Intervention or Approval

Durable Functions, an extension of Azure Functions, allows developers to build complex orchestration workflows in a serverless environment. A significant capability of these orchestrations is managing processes that require human intervention or approval. This functionality is crucial for workflows where a decision or action by a person is needed before the process can proceed.

Understanding Human Interaction in Workflows

Human interactions in automated workflows typically involve pausing the workflow until an external input is received. This could be an approval from a manager, feedback from a client, or a manual review of generated content. Durable Functions handle these scenarios through external events.

Implementing Human Interaction

To implement a workflow that requires human intervention in Durable Functions:

  1. Start with an Orchestrator Function: This function coordinates the workflow, including the wait for human input.

  2. Use External Events for Pausing and Resuming: The orchestrator function can pause its execution waiting for an external event. This event represents the human action, such as an approval.

  3. Sending Approval Requests: Typically, an activity function sends an approval request to a human via email or a web interface. This message includes a way to send the approval back, often through a secure link that triggers another Azure Function.

  4. Waiting for Approval: The orchestrator function waits for the external event triggered by human action. This is done using the waitForExternalEvent method, which effectively pauses the workflow until the specified event is received.

  5. Resuming the Workflow: Once the external event (e.g., approval) is received, the orchestrator function continues, executing the next steps in the workflow based on the input received from the human interaction.

Handling Timeouts

In real-world scenarios, human actions may not be immediate. Durable Functions allows setting a timeout for the wait. If the human action is not received within the timeout period, the workflow can proceed with a default action, escalate the issue, or retry the request.

Example Scenario: Document Approval Process

Consider a document approval process where a document generated by a system needs to be reviewed and approved by a manager before it is finalized:

Resources and Further Reading

Official Documentation and Tutorials

Community Resources, Forums, and Blogs

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/early-vs-late-binding-reflection-and-type-dynamic-in-csharp.html b/_output/early-vs-late-binding-reflection-and-type-dynamic-in-csharp.html index cb0a4a36e..921c190dc 100644 --- a/_output/early-vs-late-binding-reflection-and-type-dynamic-in-csharp.html +++ b/_output/early-vs-late-binding-reflection-and-type-dynamic-in-csharp.html @@ -1,5 +1,5 @@ -Early vs Late Binding, reflection, and type dynamic in C#

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Early vs Late Binding, reflection, and type dynamic in C#

by George Kosmidis / Published 4 years and 1 month ago, modified 3 years ago
Early vs Late Binding, reflection, and type dynamic in C#

Most script languages use late binding and most compiled languages use early binding; C#, although a compiled language and thus an early binding one, has reflection for late binding. In this post we will explore early & late binding in C# with theory and samples.

Early Binding

A binding is called an early binding, compiler time binding or static type binding when the target method is found during compile time (the code that will call the method is also created during compile time). If the required method doesn’t exist, an error is issued during compilation.

Whether there is an extra step to find the method during call time is irrelevant. That means, the binding is still considered early independently of if the method is virtual or not.

For example, the next code block uses early binding to call the RandomMethod method of the object EarlyBindingSample, and then the method NotExistingMethod that doesn’t exist. Since the second method doesn’t exists, the compiler throws an error:

public class EarlyBindingSample 
+Early vs Late Binding, reflection, and type dynamic in C#

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Early vs Late Binding, reflection, and type dynamic in C#

by George Kosmidis / Published 4 years and 1 month ago, modified 3 years ago
Early vs Late Binding, reflection, and type dynamic in C#

Most script languages use late binding and most compiled languages use early binding; C#, although a compiled language and thus an early binding one, has reflection for late binding. In this post we will explore early & late binding in C# with theory and samples.

Early Binding

A binding is called an early binding, compiler time binding or static type binding when the target method is found during compile time (the code that will call the method is also created during compile time). If the required method doesn’t exist, an error is issued during compilation.

Whether there is an extra step to find the method during call time is irrelevant. That means, the binding is still considered early independently of if the method is virtual or not.

For example, the next code block uses early binding to call the RandomMethod method of the object EarlyBindingSample, and then the method NotExistingMethod that doesn’t exist. Since the second method doesn’t exists, the compiler throws an error:

public class EarlyBindingSample 
 {
 	public void RandomMethod()
 	{
@@ -72,4 +72,4 @@
 //Call method without any parameteres (null)
 var result = method.Invoke(lateBoundSample, null);
 // You 'll get a runtime error since 'method' is null:
-// System.NullReferenceException: 'Object reference not set to an instance of an object.

A step deeper in late binding

Late Binding usually has an impact on performance because late binding requires lookups at runtime, thus, the developer has to choose which stage will be impacted more by binding; it is usually compile time that is chosen. The runtime delay though, although it’s there, is not that big of a deal in most of the cases:

  • For a normal function, the compiler can work out the numeric location of it in memory; when the function is called it can generate an instruction to call the function at this address.
  • For an object that has any virtual methods, the compiler will generate an array that contains the addresses of the virtual methods; this array is called a VMT or a Virtual Method Table. Additionally, again during compile time, the compiler will also generate a hidden member for that object, which contains the address of the VMT previously created. When a virtual function is called, the compiler will work out what the position is of the appropriate method in the VMT. It will then generate code to look in the objects VMT and call the virtual method at this position.

The lookup happening for virtual methods is heavily optimized so it will happen very quickly during runtime. That doesn’t mean there isn’t any overhead though, so when performance is critical either binding should be chosen or late bind caching during startup.

And what about dynamic?

Introduced in C# 4, many consider dynamic typing as late binding but it is not!

Usually programming languages are either dynamic typed or strongly typed and C# -as we know- is strongly typed. Type dynamic was introduced in C# 4 as an addition that comes to join the two worlds by resolving information at runtime irrespective of type. This is not binding at all, because it never binds to a type.

Read how to use type dynamic in Microsoft Docs

Playground

The playground I used during writing this article can be found in my github account with the repo name LateBindingHelloWorld. It is just a minimalistic approach on how to dynamically load and run code from an external assembly, resembling a real life scenario of dynamic module loading.
Happy coding!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +// System.NullReferenceException: 'Object reference not set to an instance of an object.

A step deeper in late binding

Late Binding usually has an impact on performance because late binding requires lookups at runtime, thus, the developer has to choose which stage will be impacted more by binding; it is usually compile time that is chosen. The runtime delay though, although it’s there, is not that big of a deal in most of the cases:

The lookup happening for virtual methods is heavily optimized so it will happen very quickly during runtime. That doesn’t mean there isn’t any overhead though, so when performance is critical either binding should be chosen or late bind caching during startup.

And what about dynamic?

Introduced in C# 4, many consider dynamic typing as late binding but it is not!

Usually programming languages are either dynamic typed or strongly typed and C# -as we know- is strongly typed. Type dynamic was introduced in C# 4 as an addition that comes to join the two worlds by resolving information at runtime irrespective of type. This is not binding at all, because it never binds to a type.

Read how to use type dynamic in Microsoft Docs

Playground

The playground I used during writing this article can be found in my github account with the repo name LateBindingHelloWorld. It is just a minimalistic approach on how to dynamically load and run code from an external assembly, resembling a real life scenario of dynamic module loading.
Happy coding!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/error-handling-in-asp-net-core-web-api.html b/_output/error-handling-in-asp-net-core-web-api.html index 87ccaef5f..f938c36da 100644 --- a/_output/error-handling-in-asp-net-core-web-api.html +++ b/_output/error-handling-in-asp-net-core-web-api.html @@ -1,8 +1,8 @@ Error handling in ASP.NET Core Web API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Error handling in ASP.NET Core Web API

by George Kosmidis / Published 5 years and 3 months ago, modified 5 years and 1 month ago

We all know the traditional try-catch blocks and -used correctly- there is of course nothing wrong with them! But even though all is good with that, ASP.NET Core has an even better way of doing things, two ways actually, that can make our code cleaner and easier to read! By following the “Middleware” approach, we extract all our custom exception handling code from within the actions and centralizing it in one place thus, cleaner code!

In this post we will explore these three cases, and starting from the simple try-catch block we will refactor towards a custom error handling middleware.

Try-Catch Block

Let’s assume the following action block:

public IActionResult Get()
+ In this post we will explore these three cases, and starting from the simple try-catch block we will refactor towards a custom error handling middleware.">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Error handling in ASP.NET Core Web API

by George Kosmidis / Published 5 years and 3 months ago, modified 5 years and 1 month ago

We all know the traditional try-catch blocks and -used correctly- there is of course nothing wrong with them! But even though all is good with that, ASP.NET Core has an even better way of doing things, two ways actually, that can make our code cleaner and easier to read! By following the “Middleware” approach, we extract all our custom exception handling code from within the actions and centralizing it in one place thus, cleaner code!

In this post we will explore these three cases, and starting from the simple try-catch block we will refactor towards a custom error handling middleware.

Try-Catch Block

Let’s assume the following action block:

public IActionResult Get()
 {
     try
     {
@@ -73,4 +73,4 @@
         else
             await context.Response.WriteAsync(context.Response.StatusCode + " Internal Server Error.");
     }
-}

Conclusion

There are many more things to do with our custom middleware! For example we could loop through inner exceptions and collect all messages, serialize stack trace or even capture only specific exceptions. In any case if you are interested in a more detailed approach on a custom error handling middleware, just read my blog post on how to Handle, serialize and return exceptions with a middleware in an ASP.NET Core API

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Conclusion

There are many more things to do with our custom middleware! For example we could loop through inner exceptions and collect all messages, serialize stack trace or even capture only specific exceptions. In any case if you are interested in a more detailed approach on a custom error handling middleware, just read my blog post on how to Handle, serialize and return exceptions with a middleware in an ASP.NET Core API

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/export-ms-sql-database-schema-with-c.html b/_output/export-ms-sql-database-schema-with-c.html index bbb7cba54..1a8f37c4d 100644 --- a/_output/export-ms-sql-database-schema-with-c.html +++ b/_output/export-ms-sql-database-schema-with-c.html @@ -1,5 +1,5 @@ -Export MS SQL Database schema with C#

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Export MS SQL Database schema with C#

by George Kosmidis / Published 11 years ago, modified 3 years ago

A few days ago I was searching for a way to export MS SQL schema of all databases of a server for backup and migration purposes. Although I found some tools, what I needed was a way to get stored procedures, functions, views, triggers and everything even if it was encrypted.

Since I couldn’t find a way to automate this (e.g. run it every night to backup schema of my server), I thought it would be a nice weekend project.

You can read more about it, or download project from https://github.com/georgekosmidis/mssql-schema-dump!

Problem 1, automate script export:
After some google search, I found out that 4 Microsoft SqlServer DLLs expose collections of all available objects in db: Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo.dll, Microsoft.SqlServer.SqlEnum.dll.
Now it was easy to get a server object and iterate every collection:

var cn = new SqlConnection( "...." );
+Export MS SQL Database schema with C#

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Export MS SQL Database schema with C#

by George Kosmidis / Published 11 years ago, modified 3 years ago

A few days ago I was searching for a way to export MS SQL schema of all databases of a server for backup and migration purposes. Although I found some tools, what I needed was a way to get stored procedures, functions, views, triggers and everything even if it was encrypted.

Since I couldn’t find a way to automate this (e.g. run it every night to backup schema of my server), I thought it would be a nice weekend project.

You can read more about it, or download project from https://github.com/georgekosmidis/mssql-schema-dump!

Problem 1, automate script export:
After some google search, I found out that 4 Microsoft SqlServer DLLs expose collections of all available objects in db: Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Management.Sdk.Sfc.dll, Microsoft.SqlServer.Smo.dll, Microsoft.SqlServer.SqlEnum.dll.
Now it was easy to get a server object and iterate every collection:

var cn = new SqlConnection( "...." );
 var sc = new ServerConnection( cn );
 Server server = new Server( sc );
 foreach (var db in server.Databases.Cast<database>().AsQueryable().Where( o => o.IsSystemObject == false )) {
@@ -18,4 +18,4 @@
 cmd.CommandText += "RECONFIGURE WITH OVERRIDE" + Environment.NewLine;
 cmd.CommandText += "exec sp_configure 'remote admin connections', 0" + Environment.NewLine;
 cmd.CommandText += "RECONFIGURE WITH OVERRIDE" + Environment.NewLine;
-cmd.ExecuteNonQuery();

That was it! The full working code that retrieves any encrypted object (as far as I know), along with the entire solution is on github: https://github.com/georgekosmidis/mssql-schema-dump

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +cmd.ExecuteNonQuery();

That was it! The full working code that retrieves any encrypted object (as far as I know), along with the entire solution is on github: https://github.com/georgekosmidis/mssql-schema-dump

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/get-started-with-swagger-and-asp-net-core.html b/_output/get-started-with-swagger-and-asp-net-core.html index 3597a3217..a06ede36b 100644 --- a/_output/get-started-with-swagger-and-asp-net-core.html +++ b/_output/get-started-with-swagger-and-asp-net-core.html @@ -1,5 +1,5 @@ -Get started with Swagger and ASP.NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Get started with Swagger and ASP.NET Core

by George Kosmidis / Published 4 years and 2 months ago
Get started with Swagger and ASP.NET Core

This post is an overview of how to install and configure Swagger for .NET Core. If you are searching for tips & tricks, you might be interested in the article: Swagger in .NET Core: Tips & Tricks.

What is Swagger

Swagger is an open-source software framework backed by a large ecosystem of tools that helps developers design, build, document, and consume RESTful web services. While most users identify Swagger by the Swagger UI tool, the Swagger toolset includes support for automated documentation, code generation, and test-case generation.

Some of these tools are:

  • Swagger Editor: Swagger Editor lets you edit OpenAPI specifications in YAML inside your browser and to preview documentations in real time.
  • Swagger UI: Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from an OAS-compliant API.
  • Swagger Codegen: Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec.
  • Swagger Inspector: API Inspection tool that lets you generate OpenAPI definitions from existing API
  • SwaggerHub: API design and documentation, built for teams working with OpenAPI.

Swagger for .NET Core

Swagger for .NET Core comes by the name Swashbuckle.AspNetCore, and it is actually composed of three components which you can potentially install seperately:

  • Swashbuckle.AspNetCore.Swagger: a Swagger object model and middleware to expose SwaggerDocument objects as JSON endpoints.
  • Swashbuckle.AspNetCore.SwaggerGen: a Swagger generator that builds SwaggerDocument objects directly from your routes, controllers, and models. It’s typically combined with the Swagger endpoint middleware to automatically expose Swagger JSON.
  • Swashbuckle.AspNetCore.SwaggerUI: an embedded version of the Swagger UI tool. It interprets Swagger JSON to build a rich, customizable experience for describing the web API functionality. It includes built-in test harnesses for the public methods.

Package installation

Assuming you installed nuget packages before, installation is very easy! Just follow the next steps to install Swashbuckle.AspNetCore nuget package from Visual Studio:

Visual Studio, Add Swashbuckle nuget package
Visual Studio, Add Swashbuckle nuget package

  1. Right click on the project you wish to install Swashbuckle.AspNetCore
  2. Click on “Manage Nuget Packages
  3. Write “Swashbuckle” in the search
  4. Click on the correct(!) package, the one named Swashbuckle.AspNetCore
  5. Click “Install

Getting started

Getting started with swagger is extremely easy, since you just need to register the three components contained in the Swashbuckle.AspNetCore in startup.cs.

If your project calls AddMvcCore() (and not AddMvc()), the AddApiExplorer() method must be explicitly called. Check the following link for more information, see Swashbuckle, ApiExplorer, and Routing.

First, add the Swagger generator to the services collection in the Startup.ConfigureServices method:

public void ConfigureServices(IServiceCollection services)
+Get started with Swagger and ASP.NET Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Get started with Swagger and ASP.NET Core

by George Kosmidis / Published 4 years and 2 months ago
Get started with Swagger and ASP.NET Core

This post is an overview of how to install and configure Swagger for .NET Core. If you are searching for tips & tricks, you might be interested in the article: Swagger in .NET Core: Tips & Tricks.

What is Swagger

Swagger is an open-source software framework backed by a large ecosystem of tools that helps developers design, build, document, and consume RESTful web services. While most users identify Swagger by the Swagger UI tool, the Swagger toolset includes support for automated documentation, code generation, and test-case generation.

Some of these tools are:

  • Swagger Editor: Swagger Editor lets you edit OpenAPI specifications in YAML inside your browser and to preview documentations in real time.
  • Swagger UI: Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from an OAS-compliant API.
  • Swagger Codegen: Allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec.
  • Swagger Inspector: API Inspection tool that lets you generate OpenAPI definitions from existing API
  • SwaggerHub: API design and documentation, built for teams working with OpenAPI.

Swagger for .NET Core

Swagger for .NET Core comes by the name Swashbuckle.AspNetCore, and it is actually composed of three components which you can potentially install seperately:

  • Swashbuckle.AspNetCore.Swagger: a Swagger object model and middleware to expose SwaggerDocument objects as JSON endpoints.
  • Swashbuckle.AspNetCore.SwaggerGen: a Swagger generator that builds SwaggerDocument objects directly from your routes, controllers, and models. It’s typically combined with the Swagger endpoint middleware to automatically expose Swagger JSON.
  • Swashbuckle.AspNetCore.SwaggerUI: an embedded version of the Swagger UI tool. It interprets Swagger JSON to build a rich, customizable experience for describing the web API functionality. It includes built-in test harnesses for the public methods.

Package installation

Assuming you installed nuget packages before, installation is very easy! Just follow the next steps to install Swashbuckle.AspNetCore nuget package from Visual Studio:

Visual Studio, Add Swashbuckle nuget package
Visual Studio, Add Swashbuckle nuget package

  1. Right click on the project you wish to install Swashbuckle.AspNetCore
  2. Click on “Manage Nuget Packages
  3. Write “Swashbuckle” in the search
  4. Click on the correct(!) package, the one named Swashbuckle.AspNetCore
  5. Click “Install

Getting started

Getting started with swagger is extremely easy, since you just need to register the three components contained in the Swashbuckle.AspNetCore in startup.cs.

If your project calls AddMvcCore() (and not AddMvc()), the AddApiExplorer() method must be explicitly called. Check the following link for more information, see Swashbuckle, ApiExplorer, and Routing.

First, add the Swagger generator to the services collection in the Startup.ConfigureServices method:

public void ConfigureServices(IServiceCollection services)
 {
     //...
 
@@ -22,4 +22,4 @@
     });
 
     //...
-}

Conclusion

Setting up swagger is very easy -you just follow the “Getting Started” guide above-, but swagger is so much more than that. If you want to find out how to setup an interactive documentation based on Swagger, along with some other tips and tricks, read the post “Swagger in .NET Core: Tips & Tricks“.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Conclusion

Setting up swagger is very easy -you just follow the “Getting Started” guide above-, but swagger is so much more than that. If you want to find out how to setup an interactive documentation based on Swagger, along with some other tips and tricks, read the post “Swagger in .NET Core: Tips & Tricks“.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/git-cheat-sheet.html b/_output/git-cheat-sheet.html index eb90475b1..4e1ab1eb4 100644 --- a/_output/git-cheat-sheet.html +++ b/_output/git-cheat-sheet.html @@ -1,5 +1,5 @@ -GIT cheat sheet

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

GIT cheat sheet

by George Kosmidis / Published 4 years and 4 months ago, modified 4 years and 2 months ago
GIT cheat sheet

I know there are many cheat sheets around (here is one I like from GitHub) but I couldn’t find many that contain sequence of commands, from clone to merge and push. This is my version of a cheatsheet which I hope you will find useful.

Basic commands

CommandDescription
git init repo_nameInitializes a new repo locally
git clone project_urlClone a project locally
git checkout branch_nameCheckout a branch
git add .Add all changes
git pushPush all changes
git pullPull all changes
git commit -m "completed feature"Commit all changes
git checkout -b feature/branchCreate a new branch
git rebase developRebase
git branch -D feature/branchDelete a branch
git reset --hardUndo all changes
git branch -m old_name new_nameRename branch
git merge featureMerge changes

Common operations

Clone a project locally:

+GIT cheat sheet

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

GIT cheat sheet

by George Kosmidis / Published 4 years and 4 months ago, modified 4 years and 2 months ago
GIT cheat sheet

I know there are many cheat sheets around (here is one I like from GitHub) but I couldn’t find many that contain sequence of commands, from clone to merge and push. This is my version of a cheatsheet which I hope you will find useful.

Basic commands

CommandDescription
git init repo_nameInitializes a new repo locally
git clone project_urlClone a project locally
git checkout branch_nameCheckout a branch
git add .Add all changes
git pushPush all changes
git pullPull all changes
git commit -m "completed feature"Commit all changes
git checkout -b feature/branchCreate a new branch
git rebase developRebase
git branch -D feature/branchDelete a branch
git reset --hardUndo all changes
git branch -m old_name new_nameRename branch
git merge featureMerge changes

Common operations

Clone a project locally:

 cd path/for/project/without/project_name
 git clone project_url
 

Create a new branch:

@@ -43,4 +43,4 @@
 

Undo all changes on branch X:

 git checkout X
 git reset --hard
-

Do you commonly use any other sequence of git commands? Send it and I will include it!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Do you commonly use any other sequence of git commands? Send it and I will include it!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/handling-serializing-and-returning-exceptions-with-a-middleware-in-asp-net-core-api.html b/_output/handling-serializing-and-returning-exceptions-with-a-middleware-in-asp-net-core-api.html index f5d3a6124..5dea85ee1 100644 --- a/_output/handling-serializing-and-returning-exceptions-with-a-middleware-in-asp-net-core-api.html +++ b/_output/handling-serializing-and-returning-exceptions-with-a-middleware-in-asp-net-core-api.html @@ -1,5 +1,5 @@ -Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

by George Kosmidis / Published 6 years and 2 months ago, modified 5 years and 2 months ago

ASP.NET Core offers a very cool way to avoid all that boring boilerplate exception handling code, just by intercepting all requests. It is called Middleware and actually, ASP.NET Core is full of built-in middlewares!

What is a middleware?

Microsoft docs describe a middleware as:

Middleware is software that’s assembled into an app pipeline to handle requests and responses. Each component:

  • Chooses whether to pass the request to the next component in the pipeline.
  • Can perform work before and after the next component in the pipeline is invoked.

But you can also get a very good idea about a middleware by just that following image:

Request processing pattern showing a request arriving, processing through three middlewares, and the response leaving the app. Each middleware runs its logic and hands off the request to the next middleware at the next() statement. After the third middleware processes the request, the request passes back through the prior two middlewares in reverse order for additional processing after their next() statements before leaving the app as a response to the client.
Request processing pattern showing a request arriving, processing through three middlewares, and the response leaving the app. Each middleware runs its logic and hands off the request to the next middleware at the next() statement. After the third middleware processes the request, the request passes back through the prior two middlewares in reverse order for additional processing after their next() statements before leaving the app as a response to the client.

The three blue middlewares above belong in a pipeline, so the black arrow that represents the request is passing from one middleware to the next. Each middleware intercepts the request in its travel towards the last middleware and can execute custom code before or after the request leaves the middleware. By seeing this image we can also have an idea about how to write our exception handling middleware: Rename Middleware 1 to ErrorHandlingMiddleware and wrap the next(); in a try catch block!

Writing an exception handling middleware

I am not going to get into details about how to write a middleware because you can easily read about it here, and thus, here is an empty useless middleware!

using Microsoft.AspNetCore.Http;
+Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

by George Kosmidis / Published 6 years and 2 months ago, modified 5 years and 2 months ago

ASP.NET Core offers a very cool way to avoid all that boring boilerplate exception handling code, just by intercepting all requests. It is called Middleware and actually, ASP.NET Core is full of built-in middlewares!

What is a middleware?

Microsoft docs describe a middleware as:

Middleware is software that’s assembled into an app pipeline to handle requests and responses. Each component:

  • Chooses whether to pass the request to the next component in the pipeline.
  • Can perform work before and after the next component in the pipeline is invoked.

But you can also get a very good idea about a middleware by just that following image:

Request processing pattern showing a request arriving, processing through three middlewares, and the response leaving the app. Each middleware runs its logic and hands off the request to the next middleware at the next() statement. After the third middleware processes the request, the request passes back through the prior two middlewares in reverse order for additional processing after their next() statements before leaving the app as a response to the client.
Request processing pattern showing a request arriving, processing through three middlewares, and the response leaving the app. Each middleware runs its logic and hands off the request to the next middleware at the next() statement. After the third middleware processes the request, the request passes back through the prior two middlewares in reverse order for additional processing after their next() statements before leaving the app as a response to the client.

The three blue middlewares above belong in a pipeline, so the black arrow that represents the request is passing from one middleware to the next. Each middleware intercepts the request in its travel towards the last middleware and can execute custom code before or after the request leaves the middleware. By seeing this image we can also have an idea about how to write our exception handling middleware: Rename Middleware 1 to ErrorHandlingMiddleware and wrap the next(); in a try catch block!

Writing an exception handling middleware

I am not going to get into details about how to write a middleware because you can easily read about it here, and thus, here is an empty useless middleware!

using Microsoft.AspNetCore.Http;
 using System.Threading.Tasks;
 
 namespace MyCodePad
@@ -88,4 +88,4 @@
         StackTrace = !isDevelopment ? new List() : ex.StackTrace.Split(Environment.NewLine).ToList()
     };
 }
-

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/how-to-make-authenticated-requests-to-an-asp-net-core-web-api-using-identityserver4-with-client-credentials.html b/_output/how-to-make-authenticated-requests-to-an-asp-net-core-web-api-using-identityserver4-with-client-credentials.html index 2fcb3d18d..b6765c933 100644 --- a/_output/how-to-make-authenticated-requests-to-an-asp-net-core-web-api-using-identityserver4-with-client-credentials.html +++ b/_output/how-to-make-authenticated-requests-to-an-asp-net-core-web-api-using-identityserver4-with-client-credentials.html @@ -1,5 +1,5 @@ -How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

by George Kosmidis / Published 4 years and 6 months ago

This is a guide on how to make requests to a protected resource using Client Credentials with the IdentityServer4.Contrib.HttpClientService nuget package. The library is actually an HttpClient service that makes it easy to make authenticated and resilient HTTP requests to protected by IdentityServer4 resources. Additionally, more features include automatic complex type serialization for requests / deserialization for responds (using Json.NET), caching of the token response to reduce load and an HttpRequestMessage factory that adds an “X-HttpClientService” header for logging/tracking between cascading API calls.

Table of Contents

  1. Install the nuget package
  2. Add the settings to appsettings.json
  3. Register the service
  4. Make a request
  5. How to setup an Access Token Request
  6. More info on how to serialize requests, deserialize responses
  7. Attaching headers to the request
  8. Conclusion

Install the nuget package

Install the IdentityServer4.Contrib.HttpClientService nuget package, using either the Package Manager or .NET CLI, or any other method:

> dotnet add package IdentityServer4.Contrib.HttpClientService --version 2.2.1

Add the settings to appsettings.json

The IdentityServer4 settings can be passed in using one of the SetIdentityServerOptions overloads which are explored later in section “How to setup an Access Token Request“. Although it is always a good idea to keep the code clean of any hard-coded values and use the appsettings.json, this step is only necessary for the SetIdentityServerOptions(String) overload.

//The values here are part of the demo offered in https://demo.identityserver.io/
+How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

by George Kosmidis / Published 4 years and 6 months ago

This is a guide on how to make requests to a protected resource using Client Credentials with the IdentityServer4.Contrib.HttpClientService nuget package. The library is actually an HttpClient service that makes it easy to make authenticated and resilient HTTP requests to protected by IdentityServer4 resources. Additionally, more features include automatic complex type serialization for requests / deserialization for responds (using Json.NET), caching of the token response to reduce load and an HttpRequestMessage factory that adds an “X-HttpClientService” header for logging/tracking between cascading API calls.

Table of Contents

  1. Install the nuget package
  2. Add the settings to appsettings.json
  3. Register the service
  4. Make a request
  5. How to setup an Access Token Request
  6. More info on how to serialize requests, deserialize responses
  7. Attaching headers to the request
  8. Conclusion

Install the nuget package

Install the IdentityServer4.Contrib.HttpClientService nuget package, using either the Package Manager or .NET CLI, or any other method:

> dotnet add package IdentityServer4.Contrib.HttpClientService --version 2.2.1

Add the settings to appsettings.json

The IdentityServer4 settings can be passed in using one of the SetIdentityServerOptions overloads which are explored later in section “How to setup an Access Token Request“. Although it is always a good idea to keep the code clean of any hard-coded values and use the appsettings.json, this step is only necessary for the SetIdentityServerOptions(String) overload.

//The values here are part of the demo offered in https://demo.identityserver.io/
 {
     //...
     "SomeClientCredentialsOptions": {
@@ -239,4 +239,4 @@
             await _httpClientService.GetAsync("https://api/sent_me_numbers")
         }
 	}
-}

Check the code on Github, and give it a star if you like it! The library is available as a nuget package with the name IdentityServer4.Contrib.HttpClientService.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Check the code on Github, and give it a star if you like it! The library is available as a nuget package with the name IdentityServer4.Contrib.HttpClientService.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/identityserver4-asp-dotnet-core-api-and-a-client-with-username-password.html b/_output/identityserver4-asp-dotnet-core-api-and-a-client-with-username-password.html index 013729f77..a5f613436 100644 --- a/_output/identityserver4-asp-dotnet-core-api-and-a-client-with-username-password.html +++ b/_output/identityserver4-asp-dotnet-core-api-and-a-client-with-username-password.html @@ -1,5 +1,5 @@ -IdentityServer4, ASP.NET Core API and a client with username/password

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

IdentityServer4, ASP.NET Core API and a client with username/password

by George Kosmidis / Published 6 years ago, modified 4 years and 2 months ago
IdentityServer4, ASP.NET Core API and a client with username/password

This is an end-to-end guide on how to quickly setup IdentityServer4, use it in your ASP.NET Core API for authentication, and finally login to your API from a client by asking a user for her/his username and password. It is divided in three parts that describe respectively the configuration of each one of the following three systems:

  • IdentityServer4
    Contains instructions on how to setup and configure a token service based on IdentityServer4, that follows the quick-start guides, keeping only the absolutely minimum requirements for this tutorial
  • ASP.NET Core API
    An API configured to use IdentityServer4 as a middleware that adds the spec compliant OpenID Connect and OAuth 2.0 endpoints
  • Client (API Consumer)
    For this post, just a Console Application that consumes a protected resource from the API

Make authenticated requests to IdentityServer4 protected resources, using the IdentityServer4.Contrib.HttpClientService nuget package. It’s open source on github, just follow these Getting Started instructions or take a look at at sample!

These systems interact with each other in a way outside the complete control of a user creating a triangle of communication that prevents man-in-the-middle attacks. To get a general idea about how the information flows between the three systems, study the following sequence flow:

IdentityServer4
IdentityServer4
A user is launching the Console Application which immediately requests a protected resource from the API. Since it’s getting a 401 as a response, the Console Application then asks for user’s credentials and with that, it requests an access token from the Identity Server. Finally, the Console Application uses the access token to request -again- the protected resource so the API responds with the protected resource, having first validate the access token with the Identity Server.

IdentityServer4

The Identity Server has three major entities that we have to setup for this tutorial to work, the ApiResource, the Client and a TestUser. All of them will need a minimum configuration, but before we start it is useful to have the following in mind:

  • The Console Application will play the role of the Client. It uses a ClientId & a Secret plus the username and the password of a User to get the token.
  • The ASP.NET Core API will of course be the ApiResource. It uses an ApiName & Secret plus the access token, to get Claims back.
  • A Client must have an ApiResource in their AllowedScopes list in order for the Idenity Server to allow access

Setting up the project

There is an easy way to create a new project for the IdentityServer4! All we need is to create the new project based on IdentityServer4 templates, and in order to do that, we must install the templates and create a new project by following these steps:

  1. Open PowerShell and navigate to a directory that you want your project to be created
  2. Type dotnet new -i IdentityServer4.Templates and hit enter
  3. Type dotnet new is4empty -n IdentityServer and hit enter again

And that’s it! You can now double click the IdentityServer.csproj created, and use Microsoft Visual Studio (or Visual Studio Code) to explore the project. Since there aren’t many files you will easily notice a Config.cs file (it keeps all the initial hard-coded configuration) with 3 IEnumerables: IdentityResources, ApiResources and Clients. For this tutorial we only care about ApiResources and Clients plus, we will also add a fourth method that returns TestUsers (all methods in Config.cs are called from StartUp.cs during service configuration, and we will follow this “pattern” for the TestUsers method).

Setting up the ApiResource

A word of notice before we start: The models of the Identity Server do not always include just properties as someone would expect by a namespace IdentityServer4.Models included in an assembly named IdentityServer4.Storage. Some of those models have constructors with a bit of logic in them (e.g. ApiResource.cs), so before you use them check them. And yes, “some storage models having some constructors with some arguments that you must use instead of the properties” is not cool at all, I spend quite some time searching which models have constructors and with what arguments.

Adding an ApiResource is quite straight forward (that is, if you read the notice above): Just use the constructor to pass the name and assign a Secret to the ApiSecrets property:

public static IEnumerable<ApiResource> GetApis()
+IdentityServer4, ASP.NET Core API and a client with username/password

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

IdentityServer4, ASP.NET Core API and a client with username/password

by George Kosmidis / Published 6 years ago, modified 4 years and 2 months ago
IdentityServer4, ASP.NET Core API and a client with username/password

This is an end-to-end guide on how to quickly setup IdentityServer4, use it in your ASP.NET Core API for authentication, and finally login to your API from a client by asking a user for her/his username and password. It is divided in three parts that describe respectively the configuration of each one of the following three systems:

  • IdentityServer4
    Contains instructions on how to setup and configure a token service based on IdentityServer4, that follows the quick-start guides, keeping only the absolutely minimum requirements for this tutorial
  • ASP.NET Core API
    An API configured to use IdentityServer4 as a middleware that adds the spec compliant OpenID Connect and OAuth 2.0 endpoints
  • Client (API Consumer)
    For this post, just a Console Application that consumes a protected resource from the API

Make authenticated requests to IdentityServer4 protected resources, using the IdentityServer4.Contrib.HttpClientService nuget package. It’s open source on github, just follow these Getting Started instructions or take a look at at sample!

These systems interact with each other in a way outside the complete control of a user creating a triangle of communication that prevents man-in-the-middle attacks. To get a general idea about how the information flows between the three systems, study the following sequence flow:

IdentityServer4
IdentityServer4
A user is launching the Console Application which immediately requests a protected resource from the API. Since it’s getting a 401 as a response, the Console Application then asks for user’s credentials and with that, it requests an access token from the Identity Server. Finally, the Console Application uses the access token to request -again- the protected resource so the API responds with the protected resource, having first validate the access token with the Identity Server.

IdentityServer4

The Identity Server has three major entities that we have to setup for this tutorial to work, the ApiResource, the Client and a TestUser. All of them will need a minimum configuration, but before we start it is useful to have the following in mind:

  • The Console Application will play the role of the Client. It uses a ClientId & a Secret plus the username and the password of a User to get the token.
  • The ASP.NET Core API will of course be the ApiResource. It uses an ApiName & Secret plus the access token, to get Claims back.
  • A Client must have an ApiResource in their AllowedScopes list in order for the Idenity Server to allow access

Setting up the project

There is an easy way to create a new project for the IdentityServer4! All we need is to create the new project based on IdentityServer4 templates, and in order to do that, we must install the templates and create a new project by following these steps:

  1. Open PowerShell and navigate to a directory that you want your project to be created
  2. Type dotnet new -i IdentityServer4.Templates and hit enter
  3. Type dotnet new is4empty -n IdentityServer and hit enter again

And that’s it! You can now double click the IdentityServer.csproj created, and use Microsoft Visual Studio (or Visual Studio Code) to explore the project. Since there aren’t many files you will easily notice a Config.cs file (it keeps all the initial hard-coded configuration) with 3 IEnumerables: IdentityResources, ApiResources and Clients. For this tutorial we only care about ApiResources and Clients plus, we will also add a fourth method that returns TestUsers (all methods in Config.cs are called from StartUp.cs during service configuration, and we will follow this “pattern” for the TestUsers method).

Setting up the ApiResource

A word of notice before we start: The models of the Identity Server do not always include just properties as someone would expect by a namespace IdentityServer4.Models included in an assembly named IdentityServer4.Storage. Some of those models have constructors with a bit of logic in them (e.g. ApiResource.cs), so before you use them check them. And yes, “some storage models having some constructors with some arguments that you must use instead of the properties” is not cool at all, I spend quite some time searching which models have constructors and with what arguments.

Adding an ApiResource is quite straight forward (that is, if you read the notice above): Just use the constructor to pass the name and assign a Secret to the ApiSecrets property:

public static IEnumerable<ApiResource> GetApis()
 {
     return new List<ApiResource>
     {
@@ -94,4 +94,4 @@
     var client = new HttpClient();
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", identityServerResponse.AccessToken);
     var apiResponse = await client.GetAsync("https://localhost:44328/api/values");
-}

Code Sample

The entire sample, constisting of a setup of the IdentityServer4, a ASP.NET Core API and a Console Application acting as a first-party client, can be found on my GitHub account under the repository https://github.com/georgekosmidis/IdentityServer4.SetupSample

Make authenticated requests to IdentityServer4 protected resources, using the IdentityServer4.Contrib.HttpClientService nuget package. It’s open source on github, just follow these Getting Started instructions or take a look at at sample!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Code Sample

The entire sample, constisting of a setup of the IdentityServer4, a ASP.NET Core API and a Console Application acting as a first-party client, can be found on my GitHub account under the repository https://github.com/georgekosmidis/IdentityServer4.SetupSample

Make authenticated requests to IdentityServer4 protected resources, using the IdentityServer4.Contrib.HttpClientService nuget package. It’s open source on github, just follow these Getting Started instructions or take a look at at sample!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/index-page-10.html b/_output/index-page-10.html deleted file mode 100644 index d696eea72..000000000 --- a/_output/index-page-10.html +++ /dev/null @@ -1,2 +0,0 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

I came across the following weird behavior in an ISABOUT query in SQL SERVER, that involves the weight keyword and the final rank of the results. I want to describe this behavior here, just in case someone has a good explanation for it!

Modified 3 years ago
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
\ No newline at end of file diff --git a/_output/index-page-2.html b/_output/index-page-2.html index fd1e0fee2..a5617c03d 100644 --- a/_output/index-page-2.html +++ b/_output/index-page-2.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
.NET Aspire

.NET Aspire

.NET Aspire significantly simplifies the development of observable, production-ready, microservice architected applications. Its design incorporates best practices and patterns that enable developers to focus on building their application's core functionality while benefiting from the framework's robust support for observability and production readiness. This approach reduces complexity and accelerates the development process, allowing teams to deliver high-quality, cloud-native applications more efficiently.

Published 1 year ago
Building Real-Time Apps with SignalR in .NET

Building Real-Time Apps with SignalR in .NET

SignalR is an open-source library that simplifies the process of adding real-time web functionality to applications. It enables two-way communication between the server and the client in real-time. As a part of the .NET ecosystem, SignalR seamlessly integrates with existing .NET applications, offering a robust solution for developing real-time features.

Published 1 year and 4 months ago
Microsoft MVP - George Kosmidis
Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Durable Functions is an extension of Azure Functions that enables you to write stateful functions in a serverless computing environment. This extension allows for the creation of complex orchestration workflows where functions can call other functions, wait for those functions to finish, and resume where they left off without maintaining state externally. Durable Functions simplifies the process of writing stateful applications in a stateless environment.

Published 1 year and 5 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
The Great Software Engineering Crisis of 2023

The Great Software Engineering Crisis of 2023

The tech industry is facing a significant turning point in 2022 and 2023 that caused widespread concerns and uncertainty about the future of software engineering jobs. Tens of thousands of employees were impacted as the industry experienced unprecedented layoffs. Amid this tumultuous time in the tech industry, Slalom stands out as a company that has taken a different approach to its employees.

Published 2 years ago

A Guide to Common Azure Services

In this article, we'll do a short overview of some of the most widely used Azure Services. In a bullet format, you'll quickly learn about their ideal use cases, which services complement them best, and where to avoid using them. Additionally, we'll note on important aspects such as backups, scalability, availability, and monitoring to help you make informed decisions when using these services. This article will be updated in the long run with new services, as demand and time allows.

Published 2 years ago
The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

AI has the potential to negatively impact freely available, publicly available data such as blog posts, code samples, and open source projects. One reason for this is that it can make it easier for people to access this information without having to visit the original source.

Published 2 years ago
Azure Scale Set vs Azure Availability Set

Azure Scale Set vs Azure Availability Set

In this blog post, we will be comparing two important features in Azure: Scale Sets and Availability Sets. Both of these features are designed to help you manage and scale your applications, but they work in different ways and are suitable for different use cases. Understanding the differences between these two features is important if you are planning to use Azure to host your applications.

Published 2 years ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Building Real-Time Apps with SignalR in .NET

Building Real-Time Apps with SignalR in .NET

SignalR is an open-source library that simplifies the process of adding real-time web functionality to applications. It enables two-way communication between the server and the client in real-time. As a part of the .NET ecosystem, SignalR seamlessly integrates with existing .NET applications, offering a robust solution for developing real-time features.

Published 1 year and 4 months ago
Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Durable Functions: Starting with Serverless Stateful Orchestrations in Azure

Durable Functions is an extension of Azure Functions that enables you to write stateful functions in a serverless computing environment. This extension allows for the creation of complex orchestration workflows where functions can call other functions, wait for those functions to finish, and resume where they left off without maintaining state externally. Durable Functions simplifies the process of writing stateful applications in a stateless environment.

Published 1 year and 5 months ago
Microsoft MVP - George Kosmidis
The Great Software Engineering Crisis of 2023

The Great Software Engineering Crisis of 2023

The tech industry is facing a significant turning point in 2022 and 2023 that caused widespread concerns and uncertainty about the future of software engineering jobs. Tens of thousands of employees were impacted as the industry experienced unprecedented layoffs. Amid this tumultuous time in the tech industry, Slalom stands out as a company that has taken a different approach to its employees.

Published 2 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

A Guide to Common Azure Services

In this article, we'll do a short overview of some of the most widely used Azure Services. In a bullet format, you'll quickly learn about their ideal use cases, which services complement them best, and where to avoid using them. Additionally, we'll note on important aspects such as backups, scalability, availability, and monitoring to help you make informed decisions when using these services. This article will be updated in the long run with new services, as demand and time allows.

Published 2 years ago
The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

AI has the potential to negatively impact freely available, publicly available data such as blog posts, code samples, and open source projects. One reason for this is that it can make it easier for people to access this information without having to visit the original source.

Published 2 years ago
Azure Scale Set vs Azure Availability Set

Azure Scale Set vs Azure Availability Set

In this blog post, we will be comparing two important features in Azure: Scale Sets and Availability Sets. Both of these features are designed to help you manage and scale your applications, but they work in different ways and are suitable for different use cases. Understanding the differences between these two features is important if you are planning to use Azure to host your applications.

Published 2 years ago
Create an Azure Function App for dotnet out-of-proc

Create an Azure Function App for dotnet out-of-proc

Did you know? In-process C# class library Azure Functions will not be supported from .NET 7.0 on! And although you should always target LTS and that gives you almost two years to adapt, the hard stop could require quite a massive rewrite!

Published 2 years and 1 month ago
\ No newline at end of file diff --git a/_output/index-page-3.html b/_output/index-page-3.html index 829dd00fa..d6ef88bc9 100644 --- a/_output/index-page-3.html +++ b/_output/index-page-3.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Create an Azure Function App for dotnet out-of-proc

Create an Azure Function App for dotnet out-of-proc

Did you know? In-process C# class library Azure Functions will not be supported from .NET 7.0 on! And although you should always target LTS and that gives you almost two years to adapt, the hard stop could require quite a massive rewrite!

Published 2 years and 1 month ago
Secrets management for ASP.NET Core and Azure DevOps

Secrets management for ASP.NET Core and Azure DevOps

In this post we will discover how to handle appsettings.json secrets (like API keys, passwords etc.) in a .NET app and eventually how to deploy a protected app and let Azure DevOps handle the secret replacement.

Published 3 years ago
Microsoft MVP - George Kosmidis
MongoDB Shell or Compass query with a GUID

MongoDB Shell or Compass query with a GUID

Just a small one for today. Have you ever tried to query MongoDB with a GUID? Well I did and it can be confusing!

Published 3 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
C# 10 – What’s new!

C# 10 – What’s new!

C# 10 is here with new and exciting feature with an opt-in approach. In this guide we will go through some of the most important changes that will make your code cleaner, smaller, faster and will hopefully convince you to upgrade now!

Published 3 years ago
.NET 6, A guide for the high impact Breaking Changes

.NET 6, A guide for the high impact Breaking Changes

.NET 6 is the first Long-Term-Support (LTS) version since the “one .NET to rule them all” era, which means it’s plan as future-proof. It includes a tone of improvements and changes that are planned to live long, thing that brought with it a few high impact Breaking Changes. Although there are lower impact braking changes too, this guide will help you identify if any of the important ones really affect you, and provide a suggestion at the same time.

Published 3 years ago
Create and use your first component in Blazor!

Create and use your first component in Blazor!

Blazor, the new client-side UI framework from the ASP.NET team, is definitely making a splash among the developers that were trying to avoid the JavaScript coding experience (or even better the debugging JavaScript experience!).

Published 3 years ago
Migrating to .NET 5 – A few clicks away!

Migrating to .NET 5 – A few clicks away!

Before you actually start reading this article, I have to be honest with you: Unless your app is a Blazor app, you don’t need to read this; all you need is to download .NET 5, change the target framework in your project properties and that’s it…! Then again, if you need the download links or want to check the process I followed, feel free!

Published 4 years ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Secrets management for ASP.NET Core and Azure DevOps

Secrets management for ASP.NET Core and Azure DevOps

In this post we will discover how to handle appsettings.json secrets (like API keys, passwords etc.) in a .NET app and eventually how to deploy a protected app and let Azure DevOps handle the secret replacement.

Published 3 years ago
MongoDB Shell or Compass query with a GUID

MongoDB Shell or Compass query with a GUID

Just a small one for today. Have you ever tried to query MongoDB with a GUID? Well I did and it can be confusing!

Published 3 years ago
Microsoft MVP - George Kosmidis
C# 10 – What’s new!

C# 10 – What’s new!

C# 10 is here with new and exciting feature with an opt-in approach. In this guide we will go through some of the most important changes that will make your code cleaner, smaller, faster and will hopefully convince you to upgrade now!

Published 3 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
.NET 6, A guide for the high impact Breaking Changes

.NET 6, A guide for the high impact Breaking Changes

.NET 6 is the first Long-Term-Support (LTS) version since the “one .NET to rule them all” era, which means it’s plan as future-proof. It includes a tone of improvements and changes that are planned to live long, thing that brought with it a few high impact Breaking Changes. Although there are lower impact braking changes too, this guide will help you identify if any of the important ones really affect you, and provide a suggestion at the same time.

Published 3 years ago
Create and use your first component in Blazor!

Create and use your first component in Blazor!

Blazor, the new client-side UI framework from the ASP.NET team, is definitely making a splash among the developers that were trying to avoid the JavaScript coding experience (or even better the debugging JavaScript experience!).

Published 3 years ago
Migrating to .NET 5 – A few clicks away!

Migrating to .NET 5 – A few clicks away!

Before you actually start reading this article, I have to be honest with you: Unless your app is a Blazor app, you don’t need to read this; all you need is to download .NET 5, change the target framework in your project properties and that’s it…! Then again, if you need the download links or want to check the process I followed, feel free!

Published 4 years ago
Things you should know about .NET 5

Things you should know about .NET 5

I know many of you are waiting for an LTS to jump in and upgrade your systems, but I think this time things are a bit different! First of all, the next LTS will be .NET 6 which is planned for November 2021, and secondly .NET 5 is already published two months ago as RC1. Actually, two release candidates of .NET 5 were published and tested by many before the actual release:

Published 4 years ago
\ No newline at end of file diff --git a/_output/index-page-4.html b/_output/index-page-4.html index a5452aea0..91453b35e 100644 --- a/_output/index-page-4.html +++ b/_output/index-page-4.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Things you should know about .NET 5

Things you should know about .NET 5

I know many of you are waiting for an LTS to jump in and upgrade your systems, but I think this time things are a bit different! First of all, the next LTS will be .NET 6 which is planned for November 2021, and secondly .NET 5 is already published two months ago as RC1. Actually, two release candidates of .NET 5 were published and tested by many before the actual release:

Published 4 years ago
Early vs Late Binding, reflection, and type dynamic in C#

Early vs Late Binding, reflection, and type dynamic in C#

Most script languages use late binding and most compiled languages use early binding; C#, although a compiled language and thus an early binding one, has reflection for late binding. In this post we will explore early & late binding in C# with theory and samples.

Modified 3 years ago
Microsoft MVP - George Kosmidis
An error occurred while starting the application, Process Failure and many more

An error occurred while starting the application, Process Failure and many more

It comes in many colors and flavors, it is usually a headache because there are multiple reasons why you can get this, it usually includes no (or minimal) information in Application log, and if you are unlucky enough to have two problems that cause this, it is a guaranteed bad day.

Published 4 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
A Hello World with Microsoft’s Machine Learning framework, ML.NET

A Hello World with Microsoft’s Machine Learning framework, ML.NET

Artificial Intelligence, Machine Learning and all relevant keywords have been leading the headlines lately and for good reason. This new field has already transformed industries across the globe, and companies are racing to understand how to integrate this emerging technology: If we had an AI ready to give answers, what would we ask? And if we can think of a question, is it valid for an AI?

Published 4 years and 2 months ago
Using MariaDB in an ASP.NET Core API with Entity Framework Core

Using MariaDB in an ASP.NET Core API with Entity Framework Core

MariaDB Server is one of the most popular open source relational databases. It’s made by the original developers of MySQL and guaranteed to stay open source. It is part of most cloud offerings and the default in most Linux distributions.

In this post, we will see how to use MariaDB as storage for an ASP.NET API and do simple CRUD operations with Entity Framework Core.

Published 4 years and 2 months ago
Code Snippet: How to upload an image with FTPS in ASP.NET Core

Code Snippet: How to upload an image with FTPS in ASP.NET Core

This post is contains sample on how to upload an image with FTPS in ASP.NET Core. It also contains a cheat sheet of all the properties and methods of an instance of an FtpWebRequest object, mostly as a quick reference guide.

Published 4 years and 2 months ago
Swagger in ASP.NET Core: Tips & Tricks

Swagger in ASP.NET Core: Tips & Tricks

This post contains a few tips and tricks that can help you transform your swagger UI into an interactive documentation. If you don’t yet know how to install swagger in ASP.NET Core, this post will help you Get started with Swagger and ASP.NET Core.

Published 4 years and 2 months ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Early vs Late Binding, reflection, and type dynamic in C#

Early vs Late Binding, reflection, and type dynamic in C#

Most script languages use late binding and most compiled languages use early binding; C#, although a compiled language and thus an early binding one, has reflection for late binding. In this post we will explore early & late binding in C# with theory and samples.

Modified 3 years ago
An error occurred while starting the application, Process Failure and many more

An error occurred while starting the application, Process Failure and many more

It comes in many colors and flavors, it is usually a headache because there are multiple reasons why you can get this, it usually includes no (or minimal) information in Application log, and if you are unlucky enough to have two problems that cause this, it is a guaranteed bad day.

Published 4 years and 2 months ago
Microsoft MVP - George Kosmidis
A Hello World with Microsoft’s Machine Learning framework, ML.NET

A Hello World with Microsoft’s Machine Learning framework, ML.NET

Artificial Intelligence, Machine Learning and all relevant keywords have been leading the headlines lately and for good reason. This new field has already transformed industries across the globe, and companies are racing to understand how to integrate this emerging technology: If we had an AI ready to give answers, what would we ask? And if we can think of a question, is it valid for an AI?

Published 4 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
Using MariaDB in an ASP.NET Core API with Entity Framework Core

Using MariaDB in an ASP.NET Core API with Entity Framework Core

MariaDB Server is one of the most popular open source relational databases. It’s made by the original developers of MySQL and guaranteed to stay open source. It is part of most cloud offerings and the default in most Linux distributions.

In this post, we will see how to use MariaDB as storage for an ASP.NET API and do simple CRUD operations with Entity Framework Core.

Published 4 years and 2 months ago
Code Snippet: How to upload an image with FTPS in ASP.NET Core

Code Snippet: How to upload an image with FTPS in ASP.NET Core

This post is contains sample on how to upload an image with FTPS in ASP.NET Core. It also contains a cheat sheet of all the properties and methods of an instance of an FtpWebRequest object, mostly as a quick reference guide.

Published 4 years and 2 months ago
Swagger in ASP.NET Core: Tips & Tricks

Swagger in ASP.NET Core: Tips & Tricks

This post contains a few tips and tricks that can help you transform your swagger UI into an interactive documentation. If you don’t yet know how to install swagger in ASP.NET Core, this post will help you Get started with Swagger and ASP.NET Core.

Published 4 years and 2 months ago
Get started with Swagger and ASP.NET Core

Get started with Swagger and ASP.NET Core

This post is an overview of how to install and configure Swagger for .NET Core. If you are searching for tips & tricks, you might be interested in the article: Swagger in .NET Core: Tips & Tricks.

Published 4 years and 2 months ago
\ No newline at end of file diff --git a/_output/index-page-5.html b/_output/index-page-5.html index b07f0e2cb..6741e5df4 100644 --- a/_output/index-page-5.html +++ b/_output/index-page-5.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Get started with Swagger and ASP.NET Core

Get started with Swagger and ASP.NET Core

This post is an overview of how to install and configure Swagger for .NET Core. If you are searching for tips & tricks, you might be interested in the article: Swagger in .NET Core: Tips & Tricks.

Published 4 years and 2 months ago
Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

This is a guide on how to use Azure DevOps to build and then publish a docker image as an Azure App Service, using Azure Container Registry.

Published 4 years and 3 months ago
Microsoft MVP - George Kosmidis
Troubleshooting “You don’t appear to have an active Azure subscription.”

Troubleshooting “You don’t appear to have an active Azure subscription.”

The message can appear in any service trying to retrieve active Azure Resources either within Azure Portal or from any 3rd party consumer. As an example, it can appear while trying to create an Azure Resource Manager service connection in Azure DevOps.

Published 4 years and 3 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
Docker cheatsheet for .NET Core

Docker cheatsheet for .NET Core

This is just a cheat sheet of commands and terminology for Docker and ASP.NET Core; it contains commands that you can find in the original cheat sheet, plus a Dockerfile for ASP.NET Core and a quick guide on how to created one from Visual Studio. Hopefully, both developers that are in the process of getting into the containerize world with Docker and developers that are already in but need a quick recap will find it useful.

Modified 3 years and 5 months ago

C# 9.0

It may be that .NET 5, the one and only .NET that will clear the confusion and lead the way for the next years was probably the biggest(?) announcement of Microsoft Build 2020, but there were numerous other equally important; from the general availability of the Blazor WebAssembly, the Azure Static Web Apps and all the projects related to IoT and Artificial Intelligence, all the way to .NET MAUI (short for Multi-platform App UI), Visual Studio Codespaces,  Entity Framework Core 5, Project Tye, Azure Quantum and the multiple new features and capabilities of Azure Cosmos DB.

Although there were many more interesting things, C# 9 was left out intentionally because in this post we will deal with some of its exciting new features!

Published 4 years and 3 months ago
GIT cheat sheet

GIT cheat sheet

I know there are many cheat sheets around (here is one I like from GitHub) but I couldn’t find many that contain sequence of commands, from clone to merge and push. This is my version of a cheatsheet which I hope you will find useful.

Modified 4 years and 2 months ago
Quantum Computing basics with Q# – The superposition of a qubit

Quantum Computing basics with Q# – The superposition of a qubit

There are some problems so difficult, so incredibly vast, that even if every supercomputer in the world worked on the problem, it would still take longer than the lifetime of the universe to solve!

Modified 4 years and 3 months ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

This is a guide on how to use Azure DevOps to build and then publish a docker image as an Azure App Service, using Azure Container Registry.

Published 4 years and 3 months ago
Troubleshooting “You don’t appear to have an active Azure subscription.”

Troubleshooting “You don’t appear to have an active Azure subscription.”

The message can appear in any service trying to retrieve active Azure Resources either within Azure Portal or from any 3rd party consumer. As an example, it can appear while trying to create an Azure Resource Manager service connection in Azure DevOps.

Published 4 years and 3 months ago
Microsoft MVP - George Kosmidis
Docker cheatsheet for .NET Core

Docker cheatsheet for .NET Core

This is just a cheat sheet of commands and terminology for Docker and ASP.NET Core; it contains commands that you can find in the original cheat sheet, plus a Dockerfile for ASP.NET Core and a quick guide on how to created one from Visual Studio. Hopefully, both developers that are in the process of getting into the containerize world with Docker and developers that are already in but need a quick recap will find it useful.

Modified 3 years and 5 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

C# 9.0

It may be that .NET 5, the one and only .NET that will clear the confusion and lead the way for the next years was probably the biggest(?) announcement of Microsoft Build 2020, but there were numerous other equally important; from the general availability of the Blazor WebAssembly, the Azure Static Web Apps and all the projects related to IoT and Artificial Intelligence, all the way to .NET MAUI (short for Multi-platform App UI), Visual Studio Codespaces,  Entity Framework Core 5, Project Tye, Azure Quantum and the multiple new features and capabilities of Azure Cosmos DB.

Although there were many more interesting things, C# 9 was left out intentionally because in this post we will deal with some of its exciting new features!

Published 4 years and 3 months ago
GIT cheat sheet

GIT cheat sheet

I know there are many cheat sheets around (here is one I like from GitHub) but I couldn’t find many that contain sequence of commands, from clone to merge and push. This is my version of a cheatsheet which I hope you will find useful.

Modified 4 years and 2 months ago
Quantum Computing basics with Q# – The superposition of a qubit

Quantum Computing basics with Q# – The superposition of a qubit

There are some problems so difficult, so incredibly vast, that even if every supercomputer in the world worked on the problem, it would still take longer than the lifetime of the universe to solve!

Modified 4 years and 3 months ago

How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

This is a guide on how to make requests to a protected resource using Client Credentials with the IdentityServer4.Contrib.HttpClientService nuget package. The library is actually an HttpClient service that makes it easy to make authenticated and resilient HTTP requests to protected by IdentityServer4 resources. Additionally, more features include automatic complex type serialization for requests / deserialization for responds (using Json.NET), caching of the token response to reduce load and an HttpRequestMessage factory that adds an “X-HttpClientService” header for logging/tracking between cascading API calls.

Published 4 years and 6 months ago
\ No newline at end of file diff --git a/_output/index-page-6.html b/_output/index-page-6.html index 21f92e695..a1c103e21 100644 --- a/_output/index-page-6.html +++ b/_output/index-page-6.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

How to make authenticated requests to an ASP.NET Core web API using IdentityServer4 with Client Credentials.

This is a guide on how to make requests to a protected resource using Client Credentials with the IdentityServer4.Contrib.HttpClientService nuget package. The library is actually an HttpClient service that makes it easy to make authenticated and resilient HTTP requests to protected by IdentityServer4 resources. Additionally, more features include automatic complex type serialization for requests / deserialization for responds (using Json.NET), caching of the token response to reduce load and an HttpRequestMessage factory that adds an “X-HttpClientService” header for logging/tracking between cascading API calls.

Published 4 years and 6 months ago

Using TPL Dataflow Library for Concurrency Testing

The Task Parallel Library contains a very interesting set of dataflow components that for some reason they didn’t get the attention they deserve. This set is called TPL Dataflow Library and in few words, it is a robust in-process actor library that worth spending some time learning it! In this post, we will learn how to use it for concurrency testing.

Published 5 years ago
Microsoft MVP - George Kosmidis
Integration Tests in ASP.NET Core API

Integration Tests in ASP.NET Core API

Automated testing is an important part of modern software production as it ensures higher quality and faster delivery, and on the same time it makes testing more affordable. Integration tests, sitting just between Unit Tests and E2E tests, improve test coverage and ensure proper communication between units. In this post, we will explore the possibilities of integration testing of ASP.NET Core by using xUnit to create a test for multiple endpoints.

Modified 4 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
Using LiteDB in an ASP.NET Core API

Using LiteDB in an ASP.NET Core API

LiteDB is serverless MongoDB-like database delivered in a single DLL (less than 350kb) fully written in .NET C# managed code (compatible with .NET 3.5, 4.x, NETStandard 1.3 and 2.0). It is ideal for mobile apps or for small desktop/web apps, and its API is very similar to MongoDB C# Official Driver.

In this post, we will see how to use LiteDB as a storage for an ASP.NET API and do simple CRUD operations with it.

Modified 4 years and 3 months ago
Action results in ASP.NET CORE APIs

Action results in ASP.NET CORE APIs

ASP.NET Core supports creating RESTful services, also known as web APIs. To handle requests, a web API uses controllers with actions (in essence methods) that return an ActionResult. Since an ActionResult can be almost anything (it’s like returning an object from your methods), it makes sense to know how to use it and when to choose to return a specific type instead.

Modified 4 years and 3 months ago

Unit testing a custom middleware in ASP.NET Core API

Middlewares are a fundamental part of any ASP.NET Core application, introduced from day one. They are executed in the order they are added on every request, and could be considered similar to the HttpHandlers and HttpModules of the classic ASP.NET. Since middlewares can execute code before or after calling the next in the pipeline, they are considered ideal for a ton of various application features, including exception handling, logging, authentication etc.

Modified 4 years and 3 months ago

Error handling in ASP.NET Core Web API

We all know the traditional try-catch blocks and -used correctly- there is of course nothing wrong with them! But even though all is good with that, ASP.NET Core has an even better way of doing things, two ways actually, that can make our code cleaner and easier to read! By following the “Middleware” approach, we extract all our custom exception handling code from within the actions and centralizing it in one place thus, cleaner code!

In this post we will explore these three cases, and starting from the simple try-catch block we will refactor towards a custom error handling middleware.

Modified 5 years and 1 month ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using TPL Dataflow Library for Concurrency Testing

The Task Parallel Library contains a very interesting set of dataflow components that for some reason they didn’t get the attention they deserve. This set is called TPL Dataflow Library and in few words, it is a robust in-process actor library that worth spending some time learning it! In this post, we will learn how to use it for concurrency testing.

Published 5 years ago
Integration Tests in ASP.NET Core API

Integration Tests in ASP.NET Core API

Automated testing is an important part of modern software production as it ensures higher quality and faster delivery, and on the same time it makes testing more affordable. Integration tests, sitting just between Unit Tests and E2E tests, improve test coverage and ensure proper communication between units. In this post, we will explore the possibilities of integration testing of ASP.NET Core by using xUnit to create a test for multiple endpoints.

Modified 4 years and 2 months ago
Microsoft MVP - George Kosmidis
Using LiteDB in an ASP.NET Core API

Using LiteDB in an ASP.NET Core API

LiteDB is serverless MongoDB-like database delivered in a single DLL (less than 350kb) fully written in .NET C# managed code (compatible with .NET 3.5, 4.x, NETStandard 1.3 and 2.0). It is ideal for mobile apps or for small desktop/web apps, and its API is very similar to MongoDB C# Official Driver.

In this post, we will see how to use LiteDB as a storage for an ASP.NET API and do simple CRUD operations with it.

Modified 4 years and 3 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
Action results in ASP.NET CORE APIs

Action results in ASP.NET CORE APIs

ASP.NET Core supports creating RESTful services, also known as web APIs. To handle requests, a web API uses controllers with actions (in essence methods) that return an ActionResult. Since an ActionResult can be almost anything (it’s like returning an object from your methods), it makes sense to know how to use it and when to choose to return a specific type instead.

Modified 4 years and 3 months ago

Unit testing a custom middleware in ASP.NET Core API

Middlewares are a fundamental part of any ASP.NET Core application, introduced from day one. They are executed in the order they are added on every request, and could be considered similar to the HttpHandlers and HttpModules of the classic ASP.NET. Since middlewares can execute code before or after calling the next in the pipeline, they are considered ideal for a ton of various application features, including exception handling, logging, authentication etc.

Modified 4 years and 3 months ago

Error handling in ASP.NET Core Web API

We all know the traditional try-catch blocks and -used correctly- there is of course nothing wrong with them! But even though all is good with that, ASP.NET Core has an even better way of doing things, two ways actually, that can make our code cleaner and easier to read! By following the “Middleware” approach, we extract all our custom exception handling code from within the actions and centralizing it in one place thus, cleaner code!

In this post we will explore these three cases, and starting from the simple try-catch block we will refactor towards a custom error handling middleware.

Modified 5 years and 1 month ago
IdentityServer4, ASP.NET Core API and a client with username/password

IdentityServer4, ASP.NET Core API and a client with username/password

This is an end-to-end guide on how to quickly setup IdentityServer4, use it in your ASP.NET Core API for authentication, and finally login to your API from a client by asking a user for their username and password. It is divided in three parts that describe respectively the configuration of each one of the following three systems:

Modified 4 years and 2 months ago
\ No newline at end of file diff --git a/_output/index-page-7.html b/_output/index-page-7.html index 076642281..0c8a3a362 100644 --- a/_output/index-page-7.html +++ b/_output/index-page-7.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
IdentityServer4, ASP.NET Core API and a client with username/password

IdentityServer4, ASP.NET Core API and a client with username/password

This is an end-to-end guide on how to quickly setup IdentityServer4, use it in your ASP.NET Core API for authentication, and finally login to your API from a client by asking a user for their username and password. It is divided in three parts that describe respectively the configuration of each one of the following three systems:

Modified 4 years and 2 months ago
Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

As most of us, I already know my next week work schedule. It includes writing some actions in respond to a requirement for excel exports. It’s nothing new and its’s relatively easy with libraries like NPOI: you just create your excel on the fly and return a FileResult.

Modified 4 years and 2 months ago
Microsoft MVP - George Kosmidis

Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

ASP.NET Core offers a very cool way to avoid all that boring boilerplate exception handling code, just by intercepting all requests. It is called Middleware and actually, ASP.NET Core is full of built-in middlewares!

Modified 5 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
Publishing ASP.NET Core: An error occurred while starting the application

Publishing ASP.NET Core: An error occurred while starting the application

Have you seen this error?
An error occurred while starting the application.
.NET Core <version> | Microsoft.AspNetCore.Hosting <version> | Microsoft Windows <version> | Need help?

Modified 4 years and 2 months ago

Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

Entity Framework Core allows you to drop down to raw SQL queries when working with a relational database. This can be useful, because raw SQL queries can return entity types or, starting with EF Core 2.1, query types that are part of your model, but it could also be a problem when it comes down to Unit Testing.

Modified 4 years and 2 months ago

Thread synchronisation with SemaphoreSlim and async delegate calls

Although running a parallel foreach that makes async calls is a pretty usual task, I found my self in a complicated situation, when async delegate calls got in the way!

Modified 3 years ago

Mocking expected behaviour of SQL functions for Unit Testing with SQLite

While unit testing, I came across a method in an SQL repository class that was using a raw SQL query, and along with that, SQL Server’s newid() function. Since the complicated reason behind this decision was out of scope, I had to find a way to unit test that method…

SQLite was -of course- the first approach, but any attempt to actually test the method would nevertheless fail with the exception Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such function: newid'.'.

Modified 5 years and 2 months ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

As most of us, I already know my next week work schedule. It includes writing some actions in respond to a requirement for excel exports. It’s nothing new and its’s relatively easy with libraries like NPOI: you just create your excel on the fly and return a FileResult.

Modified 4 years and 2 months ago

Handling, serializing and returning exceptions with a middleware in an ASP.NET Core API

ASP.NET Core offers a very cool way to avoid all that boring boilerplate exception handling code, just by intercepting all requests. It is called Middleware and actually, ASP.NET Core is full of built-in middlewares!

Modified 5 years and 2 months ago
Microsoft MVP - George Kosmidis
Publishing ASP.NET Core: An error occurred while starting the application

Publishing ASP.NET Core: An error occurred while starting the application

Have you seen this error?
An error occurred while starting the application.
.NET Core <version> | Microsoft.AspNetCore.Hosting <version> | Microsoft Windows <version> | Need help?

Modified 4 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

Entity Framework Core allows you to drop down to raw SQL queries when working with a relational database. This can be useful, because raw SQL queries can return entity types or, starting with EF Core 2.1, query types that are part of your model, but it could also be a problem when it comes down to Unit Testing.

Modified 4 years and 2 months ago

Thread synchronisation with SemaphoreSlim and async delegate calls

Although running a parallel foreach that makes async calls is a pretty usual task, I found my self in a complicated situation, when async delegate calls got in the way!

Modified 3 years ago

Mocking expected behaviour of SQL functions for Unit Testing with SQLite

While unit testing, I came across a method in an SQL repository class that was using a raw SQL query, and along with that, SQL Server’s newid() function. Since the complicated reason behind this decision was out of scope, I had to find a way to unit test that method…

SQLite was -of course- the first approach, but any attempt to actually test the method would nevertheless fail with the exception Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such function: newid'.'.

Modified 5 years and 2 months ago

Simple website stress tool with C# and Apache HTTP server benchmarking tool

To be honest, I got bored trying to remember all switches and combinations of Apache’s benchmarking tool! Since I use it sort of rarely, I just wrapped it in a convenient -for me at least- app that I can use without having to remember or read anything!

Modified 3 years ago
\ No newline at end of file diff --git a/_output/index-page-8.html b/_output/index-page-8.html index 888d7a19f..a72922809 100644 --- a/_output/index-page-8.html +++ b/_output/index-page-8.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Simple website stress tool with C# and Apache HTTP server benchmarking tool

To be honest, I got bored trying to remember all switches and combinations of Apache’s benchmarking tool! Since I use it sort of rarely, I just wrapped it in a convenient -for me at least- app that I can use without having to remember or read anything!

Modified 3 years ago

ASP.NET MVC 5 with Razor Kendo UI: Dynamic Grid Creation – Columns, Ordering, Grouping and Paging

The requirements were simple! A grid that will load a whatever query, grouped by whatever columns, with filters enabled, paging and everything. Easy task with ASP.NET Telerik grids but not easy at all with Kendo UI!

Since we can’t have a ViewModel or Model for the grid (we don’t know what columns a whatever query has!), I came up with a rather different ViewModel that holds descriptions for columns, groups etc…:

Modified 4 years and 3 months ago
Microsoft MVP - George Kosmidis

ASP.NET MVC 5: Custom authentication with OnActionExecuting

Although I prefer the AuthorizeAttribute approach, there is another simpler way with a base Controller and OnActionExecuting:

Let’s assume the following Controller:

Modified 5 years and 2 months ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

In a previous post I wrote about how you can should protect your web app from human errors by enforcing authentication by default.

Modified 3 years ago

ASP.NET MVC 5: “Authorization” by default for your web app

Securing your MVC app is a tricky business! Although security is a huge topic, one of the problems that you might encounter is that unauthenticated users are allowed by default to execute every action in your web app. This behaviour is potentially unsafe because you have to remember to decorate your actions with the authorize attribute each and every time, and humans are of course prone to errors!

Modified 3 years ago

C#: Basic Combinatorics

Basic combinatorics in C# is a straight forward task for relatively small numbers like (100!). This is a helper class I wrote when I was asked to write an online lottery system.

Keep in mind though, that for bigger numbers (above 100!) you will need Arbitrary-precision arithmetic.

Here is the code and please, if someone knows a faster way or has some suggestions let me now!

Modified 4 years and 3 months ago

Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

After a good 2 hours of searching what the **** happened and Visual Studio stopped working, I finally found a working solution..!

Modified 3 years ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5 with Razor Kendo UI: Dynamic Grid Creation – Columns, Ordering, Grouping and Paging

The requirements were simple! A grid that will load a whatever query, grouped by whatever columns, with filters enabled, paging and everything. Easy task with ASP.NET Telerik grids but not easy at all with Kendo UI!

Since we can’t have a ViewModel or Model for the grid (we don’t know what columns a whatever query has!), I came up with a rather different ViewModel that holds descriptions for columns, groups etc…:

Modified 4 years and 3 months ago

ASP.NET MVC 5: Custom authentication with OnActionExecuting

Although I prefer the AuthorizeAttribute approach, there is another simpler way with a base Controller and OnActionExecuting:

Let’s assume the following Controller:

Modified 5 years and 2 months ago
Microsoft MVP - George Kosmidis

ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

In a previous post I wrote about how you can should protect your web app from human errors by enforcing authentication by default.

Modified 3 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

ASP.NET MVC 5: “Authorization” by default for your web app

Securing your MVC app is a tricky business! Although security is a huge topic, one of the problems that you might encounter is that unauthenticated users are allowed by default to execute every action in your web app. This behaviour is potentially unsafe because you have to remember to decorate your actions with the authorize attribute each and every time, and humans are of course prone to errors!

Modified 3 years ago

C#: Basic Combinatorics

Basic combinatorics in C# is a straight forward task for relatively small numbers like (100!). This is a helper class I wrote when I was asked to write an online lottery system.

Keep in mind though, that for bigger numbers (above 100!) you will need Arbitrary-precision arithmetic.

Here is the code and please, if someone knows a faster way or has some suggestions let me now!

Modified 4 years and 3 months ago

Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

After a good 2 hours of searching what the **** happened and Visual Studio stopped working, I finally found a working solution..!

Modified 3 years ago

Export MS SQL Database schema with C#

A few days ago I was searching for a way to export MS SQL schema of all databases of a server for backup and migration purposes. Although I found some tools, what I needed was a way to get stored procedures, functions, views, triggers and everything even if it was encrypted.

Modified 3 years ago
\ No newline at end of file diff --git a/_output/index-page-9.html b/_output/index-page-9.html index 91b2ec5fb..446e2f064 100644 --- a/_output/index-page-9.html +++ b/_output/index-page-9.html @@ -1,3 +1,3 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Export MS SQL Database schema with C#

A few days ago I was searching for a way to export MS SQL schema of all databases of a server for backup and migration purposes. Although I found some tools, what I needed was a way to get stored procedures, functions, views, triggers and everything even if it was encrypted.

Modified 3 years ago

C#: Calculating all Greek Public Holidays for any given year

After calculating the Greek Orthodox Easter, it was time for the public holidays calculation. With the Easter calculation ready, it proved to be much easier than expected!

Modified 4 years and 3 months ago
Microsoft MVP - George Kosmidis

C#: Calculating Orthodox and Catholic Easter

Some time ago I was called about an online calendar for a company’s portal. The need was to inform employees about public holidays for the requested year. In Greece, some of those holidays are static meaning they occur the exact same date each year, but some are based on the Orthodox Easter so they move from date to date. There are a lot of online services that can return these information, but I thought I should give it a go and try writing the Orthodox Easter calculation in C#. Saying that, I found the algorithm online and since I was there I also found the Catholic Easter algorithm.

Modified 3 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

SQL Server: Using RANK to display PERCENT (percentage of relevance)

So you end up with a query l that returns what you searched for and with SQL Server Full Text Search engine, and with it the RANK column! How do you end up with a percentage of relevance for your users to enjoy?

Modified 3 years ago

C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

Did you know that HTTP_X_FORWARDED_FOR can return multiple IPs? According to http://en.wikipedia.org/wiki/X-Forwarded-For the format is:

X-Forwarded-For: client, proxy1, proxy2
-

Modified 4 years and 3 months ago

SQL Server: How to simulate DROP TRIGGER IF EXISTS

I usually store triggers, store procedures, functions, queries etc in sql files in an SVN repository. I then use a simple app I wrote, that just opens each file and executes it. The problem of course is CREATE and ALTER. I can’t use CREATE because the same trigger might already be there. On the other hand I couldn’t use ALTER because some triggers might be new.

Modified 3 years ago
SQL Server: Using .NET assemblies (SQLCLR)

SQL Server: Using .NET assemblies (SQLCLR)

SQLCLR is a technology for hosting of the .NET CLR engine inside SQL Server. Adding an assembly can be a lifesaver sometimes, since the limitations of coding in TSQL stored procedures, triggers or functions are a lot and profound.

Modified 4 years and 1 month ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

C#: Calculating all Greek Public Holidays for any given year

After calculating the Greek Orthodox Easter, it was time for the public holidays calculation. With the Easter calculation ready, it proved to be much easier than expected!

Modified 4 years and 3 months ago

C#: Calculating Orthodox and Catholic Easter

Some time ago I was called about an online calendar for a company’s portal. The need was to inform employees about public holidays for the requested year. In Greece, some of those holidays are static meaning they occur the exact same date each year, but some are based on the Orthodox Easter so they move from date to date. There are a lot of online services that can return these information, but I thought I should give it a go and try writing the Orthodox Easter calculation in C#. Saying that, I found the algorithm online and since I was there I also found the Catholic Easter algorithm.

Modified 3 years ago
Microsoft MVP - George Kosmidis

SQL Server: Using RANK to display PERCENT (percentage of relevance)

So you end up with a query l that returns what you searched for and with SQL Server Full Text Search engine, and with it the RANK column! How do you end up with a percentage of relevance for your users to enjoy?

Modified 3 years ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries

C#: Getting a user IP behind a proxy (HTTP_X_FORWARDED_FOR)

Did you know that HTTP_X_FORWARDED_FOR can return multiple IPs? According to http://en.wikipedia.org/wiki/X-Forwarded-For the format is:

X-Forwarded-For: client, proxy1, proxy2
+

Modified 4 years and 3 months ago

SQL Server: How to simulate DROP TRIGGER IF EXISTS

I usually store triggers, store procedures, functions, queries etc in sql files in an SVN repository. I then use a simple app I wrote, that just opens each file and executes it. The problem of course is CREATE and ALTER. I can’t use CREATE because the same trigger might already be there. On the other hand I couldn’t use ALTER because some triggers might be new.

Modified 3 years ago
SQL Server: Using .NET assemblies (SQLCLR)

SQL Server: Using .NET assemblies (SQLCLR)

SQLCLR is a technology for hosting of the .NET CLR engine inside SQL Server. Adding an assembly can be a lifesaver sometimes, since the limitations of coding in TSQL stored procedures, triggers or functions are a lot and profound.

Modified 4 years and 1 month ago

SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

I came across the following weird behavior in an ISABOUT query in SQL SERVER, that involves the weight keyword and the final rank of the results. I want to describe this behavior here, just in case someone has a good explanation for it!

Modified 3 years ago
\ No newline at end of file diff --git a/_output/index.html b/_output/index.html index 45c37cc20..7d51cc8de 100644 --- a/_output/index.html +++ b/_output/index.html @@ -1,2 +1,2 @@ -George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Choose The Right Azure Service Plan (with a flowchart)

Choose The Right Azure Service Plan (with a flowchart)

Selecting the right Azure Service Plan is crucial for optimizing performance, cost, and scalability. This article provides a flowchart to help you choose the correct tier and includes plan details for each tier to help you get started.

Published a few seconds ago
Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

This article provides a step-by-step guide on how to automate the deployment of workflows in Azure Logic Apps (Standard Plan) using the Azure CLI. It explains how to organize workflows, zip them, and deploy them to Azure through a Bash script, making it ideal for developers looking to streamline Logic App deployments in CI/CD pipelines.

Published 3 days ago
Microsoft MVP - George Kosmidis
Variables in Bash and Azure Pipelines

Variables in Bash and Azure Pipelines

In this article, we'll explore the basics of variables in Bash, focusing on the role of symbols like $, (, [, and {. Each of these symbols has a specific function in Bash scripting, from referencing variables to grouping commands and conditions. Understanding these will not only enhance your scripting skills but will also give you a better grasp of how similar concepts are applied in Azure Pipelines

Published 1 week ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
How to Build and Customize the Azure SDK for JavaScript

How to Build and Customize the Azure SDK for JavaScript

The Azure Document Intelligence API offers powerful capabilities for form recognition and document analysis. However, the client library for JavaScript that offers ease of usage might not always align with your needs, especially when it comes to using preview versions of the API. In this blog post, we'll explore how to override the default API version used by the Azure Document Intelligence SDK to leverage the latest preview features.

Published 2 months and 1 week ago
Infinity: The Cosmology God

Infinity: The Cosmology God

This -way out of line- article explores the parallel between infinity and the concept of a god in scientific inquiry. Much like a divine entity, infinity serves as a placeholder for the unknown and a tool for pushing the boundaries of exploration, offering both insights and convenient escapes from the limitations of human understanding.

Published 3 months and 1 week ago
Preview versions in Azure Document Intelligence client libraries

Preview versions in Azure Document Intelligence client libraries

The Azure Document Intelligence API offers powerful capabilities for form recognition and document analysis. However, the client library for JavaScript that offers ease of usage might not always align with your needs, especially when it comes to using preview versions of the API. In this blog post, we'll explore how to override the default API version used by the Azure Document Intelligence SDK to leverage the latest preview features.

Published 4 months and 1 week ago
An Introduction to Semantic Kernel and Semantic Understanding

An Introduction to Semantic Kernel and Semantic Understanding

Semantic Kernel is an SDK that integrates Large Language Models (LLMs) like OpenAI, Azure OpenAI, and Hugging Face with conventional programming languages like C#, Python, and Java. Semantic Kernel achieves this by allowing you to define plugins that can be chained together in just a few lines of code.

Published 6 months ago
\ No newline at end of file +George Kosmidis

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom
Choose The Right Azure Service Plan (with a flowchart)

Choose The Right Azure Service Plan (with a flowchart)

Selecting the right Azure Service Plan is crucial for optimizing performance, cost, and scalability. This article provides a flowchart to help you choose the correct tier and includes plan details for each tier to help you get started.

Published a few seconds ago
Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

Deploy an Azure Logic Apps Workflow in Standard Plan with Azure DevOps

This article provides a step-by-step guide on how to automate the deployment of workflows in Azure Logic Apps (Standard Plan) using the Azure CLI. It explains how to organize workflows, zip them, and deploy them to Azure through a Bash script, making it ideal for developers looking to streamline Logic App deployments in CI/CD pipelines.

Published 3 days ago
Microsoft MVP - George Kosmidis
Variables in Bash and Azure Pipelines

Variables in Bash and Azure Pipelines

In this article, we'll explore the basics of variables in Bash, focusing on the role of symbols like $, (, [, and {. Each of these symbols has a specific function in Bash scripting, from referencing variables to grouping commands and conditions. Understanding these will not only enhance your scripting skills but will also give you a better grasp of how similar concepts are applied in Azure Pipelines

Published 1 week ago
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
How to Build and Customize the Azure SDK for JavaScript

How to Build and Customize the Azure SDK for JavaScript

The Azure Document Intelligence API offers powerful capabilities for form recognition and document analysis. However, the client library for JavaScript that offers ease of usage might not always align with your needs, especially when it comes to using preview versions of the API. In this blog post, we'll explore how to override the default API version used by the Azure Document Intelligence SDK to leverage the latest preview features.

Published 2 months and 1 week ago
Infinity: The Cosmology God

Infinity: The Cosmology God

This -way out of line- article explores the parallel between infinity and the concept of a god in scientific inquiry. Much like a divine entity, infinity serves as a placeholder for the unknown and a tool for pushing the boundaries of exploration, offering both insights and convenient escapes from the limitations of human understanding.

Published 3 months and 1 week ago
An Introduction to Semantic Kernel and Semantic Understanding

An Introduction to Semantic Kernel and Semantic Understanding

Semantic Kernel is an SDK that integrates Large Language Models (LLMs) like OpenAI, Azure OpenAI, and Hugging Face with conventional programming languages like C#, Python, and Java. Semantic Kernel achieves this by allowing you to define plugins that can be chained together in just a few lines of code.

Published 6 months ago
.NET Aspire

.NET Aspire

.NET Aspire significantly simplifies the development of observable, production-ready, microservice architected applications. Its design incorporates best practices and patterns that enable developers to focus on building their application's core functionality while benefiting from the framework's robust support for observability and production readiness. This approach reduces complexity and accelerates the development process, allowing teams to deliver high-quality, cloud-native applications more efficiently.

Published 1 year ago
\ No newline at end of file diff --git a/_output/infinity-the-cosmology-god.html b/_output/infinity-the-cosmology-god.html index 27b89c4cb..129028624 100644 --- a/_output/infinity-the-cosmology-god.html +++ b/_output/infinity-the-cosmology-god.html @@ -1,2 +1,2 @@ -Infinity: The Cosmology God

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Infinity: The Cosmology God

by George Kosmidis / Published 3 months and 1 week ago
Infinity: The Cosmology God

Contents

This article explores the parallel between infinity and the concept of a god in scientific inquiry. Much like a divine entity, infinity serves as a placeholder for the unknown and a tool for pushing the boundaries of exploration, offering both insights and convenient escapes from the limitations of human understanding.

Section 1: Understanding Infinity

Definition and Origins

Infinity is a concept that describes something without any limit or end. In mathematics, it is often represented by the symbol ∞ and is used to signify quantities that are larger than any finite number. Philosophically, infinity pushes us to think about the limitless, the boundless, and the eternal, stretching our imagination beyond the finite experiences of daily life.

The origins of the concept of infinity can be traced back to ancient civilizations. The Greeks, particularly the philosopher Anaximander, pondered the concept of the "apeiron," which means "unlimited" or "infinite." The term was used to describe the boundless nature of the cosmos. Later, Zeno of Elea's paradoxes, like the famous paradox of Achilles and the tortoise, played with the idea of infinity to challenge our understanding of motion and space.

The famous paradox of Achilles and the tortoise, proposed by the ancient Greek philosopher Zeno, is a thought experiment about motion and infinity. In the paradox, Achilles, a swift runner, gives a tortoise a head start in a race. Zeno argues that Achilles will never catch up to the tortoise because whenever Achilles reaches the point where the tortoise was, the tortoise has moved a bit further. This process theoretically continues infinitely, suggesting that Achilles can never overtake the tortoise, highlighting the counterintuitive nature of infinite series and motion.

In mathematics, infinity began to take a more rigorous form during the development of calculus in the 17th century. Mathematicians like Isaac Newton and Gottfried Wilhelm Leibniz used the concept of infinitesimals, quantities that are infinitely small, to develop the foundational principles of calculus.

Historical Context

Infinity has been viewed and used in various ways across different cultures and scientific periods. In ancient India, the concept of infinity was embedded in the religious and philosophical texts. The Jain mathematician Mahavira (around 9th century CE) wrote about different types of infinities, distinguishing between countable and uncountable infinities, long before similar ideas were formalized in the West.

During the Middle Ages in Europe, infinity took on a theological dimension. Medieval scholars grappled with the concept of an infinite God and the paradoxes that arose from considering the nature of the divine and the universe. This period saw a blend of religious and philosophical inquiries into the nature of the infinite.

The Renaissance and the subsequent Scientific Revolution marked a turning point in the understanding of infinity. The work of Galileo Galilei and Johannes Kepler contributed to the mathematical and astronomical exploration of infinite concepts. Galileo’s study of infinite sets and Kepler’s laws of planetary motion highlighted the necessity of considering infinity in scientific models.

In the 19th century, the German mathematician Georg Cantor revolutionized the mathematical understanding of infinity. Cantor developed set theory and introduced the concept of different sizes of infinity, showing that some infinities are larger than others. His work laid the foundation for modern mathematics and our current understanding of the infinite.

Today, infinity remains a crucial concept in both theoretical and applied sciences. It appears in various branches of mathematics, physics, cosmology, and even computer science. From the infinite expanse of the universe to the infinitesimal particles studied in quantum mechanics, infinity continues to challenge and expand the boundaries of human knowledge.

Section 2: Infinity in Physics and Cosmology

Infinite Universe

The concept of an infinite universe has fascinated scientists and philosophers for centuries. The idea posits that the universe extends infinitely in all directions, with no boundaries or edges. This has profound implications for our understanding of space, time, and the very nature of existence.

  1. Implications for Cosmology:

    • Homogeneity and Isotropy: An infinite universe supports the cosmological principle, which states that the universe is homogeneous and isotropic on large scales. This means it looks the same everywhere and in every direction.
    • Multiverse Theory: Infinity opens up the possibility of a multiverse, where an infinite number of universes exist parallel to our own, each with its own physical laws and constants.
    • Endless Exploration: The concept suggests that there is always more to discover, as there are no limits to what the universe contains.
  2. Philosophical Implications:

    • Existential Questions: An infinite universe raises questions about our place in the cosmos and the nature of our existence. If the universe is infinite, what does that mean for the significance of human life?
    • Paradoxes: Infinity leads to paradoxes, such as Olbers' Paradox, which questions why the night sky is dark if there are an infinite number of stars.

Black Holes and Singularities

Black holes are regions of space where gravity is so strong that nothing, not even light, can escape. At the center of a black hole lies a singularity, a point where density becomes infinite and the laws of physics as we know them break down.

  1. The Nature of Singularities:

    • Infinite Density: Singularities are thought to contain mass compressed into an infinitely small space, leading to infinite density and curvature of spacetime.
    • Event Horizon: The boundary surrounding a black hole, known as the event horizon, marks the point beyond which nothing can escape. Inside this boundary, the concept of infinity becomes crucial to understanding the gravitational effects.
  2. Challenges in Physics:

    • Breakdown of General Relativity: At singularities, general relativity, which describes the gravitational force, no longer applies. This breakdown signals the need for a quantum theory of gravity.
    • Information Paradox: The concept of infinity also plays a role in the black hole information paradox, which questions what happens to information that falls into a black hole. Does it get lost forever, or is it somehow preserved?

Challenge

While infinity is a powerful tool in physics and cosmology, it can also be seen as a convenient way to hide our lack of understanding. Critics argue that invoking infinity is like using a "magic blanket" to cover gaps in our knowledge.

  1. Masking the Unknown:

    • Avoiding Deeper Inquiry: By attributing phenomena to infinity, we may be avoiding deeper questions and more thorough investigations. For example, rather than exploring the true nature of singularities, we accept their infinite properties without fully understanding them.
    • Limitations of Current Theories: Relying on infinity highlights the limitations of our current theories. If our mathematical models predict infinities, it could mean that these models are incomplete or need refinement.
  2. Call for New Theories:

    • Quantum Gravity: The issues surrounding black holes and singularities suggest the need for a quantum theory of gravity that can reconcile general relativity with quantum mechanics.
    • Innovative Approaches: Embracing the challenge of infinity should inspire scientists to develop innovative approaches and new theories that can better explain the universe without resorting to infinite concepts.

While the concept of infinity plays a crucial role in our understanding of the universe and black holes, it also serves as a reminder of the limitations of our current knowledge. By recognizing infinity as both a tool and a challenge, we can push the boundaries of science and strive for a deeper understanding of the cosmos.

Section 3: Infinity as a Placeholder for the Unknown

Bridging Gaps in Knowledge

Infinity often serves as a tool to bridge the gaps in our understanding when current theories and knowledge fall short. In physics and cosmology, for instance, the concept of infinity is invoked to describe the vastness of the universe, the behavior of black holes, and the nature of time and space. When scientists encounter phenomena that are beyond the scope of existing models, infinity provides a way to conceptualize these unknowns. It allows us to develop theories that can accommodate extreme scales and conditions, pushing the boundaries of what we can explore and understand.

For example, in the realm of quantum mechanics and general relativity, infinities often appear in equations describing singularities, such as those found at the center of black holes. These infinities signal a breakdown of our current theories, indicating that a new, more comprehensive theory is needed. By using infinity, scientists can continue to work with these models while acknowledging their limitations and the need for further development.

Comparisons to Deity Concepts

The use of infinity in science parallels the concept of a god in religion in several ways. Both serve as placeholders for the unknown and the unexplainable. In religion, a god is often invoked to explain the origins of the universe, the nature of existence, and the meaning of life—areas where human understanding is limited. Similarly, infinity is used in science to grapple with concepts that are beyond our current comprehension.

Just as a deity can represent the ultimate source of knowledge and power, infinity represents the boundless potential of the universe and the endless possibilities for discovery. Both concepts inspire awe and drive the pursuit of deeper understanding, whether through faith or scientific inquiry. By invoking infinity, scientists acknowledge the vastness of what we do not yet know, much like how religious belief acknowledges the mysteries of the divine.

Challenge

Despite its utility, the use of infinity as a placeholder for the unknown has its critics. Some argue that it serves as a convenient tool to hide the limits of our knowledge, allowing scientists to sidestep difficult questions and avoid deeper exploration. This criticism suggests that by relying on infinity, we may be masking our ignorance and delaying the search for more concrete answers.

For instance, when infinities appear in equations, it often indicates that our current theories are incomplete or flawed. Instead of using infinity as a stopgap, critics argue that we should focus on developing new theories and models that eliminate these infinities and provide a more accurate understanding of the phenomena in question. This perspective challenges the scientific community to move beyond the comfort of infinite constructs and strive for more tangible explanations.

Moreover, the invocation of infinity can sometimes lead to philosophical complacency, where the true nature of the universe is deemed unknowable and therefore not worth pursuing further. This "magic blanket" of infinity can stifle innovation and critical thinking, as it creates a sense of finality in areas that are still ripe for exploration.

Section 4: The Mathematical Perspective on Infinity

Infinity in Mathematics

Infinity plays a crucial role in mathematics, providing a framework for understanding and solving problems that involve unbounded processes. Here are a few key areas where infinity is indispensable:

  1. Calculus: Infinity is fundamental to calculus, particularly in the concepts of limits and integrals. For example, when evaluating the limit of a function as it approaches a certain point, infinity helps describe the behavior of the function as it grows without bound. Integrals often extend to infinity, allowing mathematicians to calculate areas under curves that stretch indefinitely.

  2. Limits: The concept of a limit involves approaching a value as closely as desired, without necessarily reaching it. Infinity is used to express limits at the boundaries of possible values, such as in the case of infinite series or functions that grow indefinitely.

  3. Infinite Series: Infinite series are sums of infinitely many terms. They are used to represent numbers, functions, and solutions to equations. For instance, the famous series 1 + 1/2 + 1/4 + 1/8 + ... converges to 2, illustrating how an infinite process can yield a finite result.

  4. Transfinite Numbers: Introduced by Georg Cantor, transfinite numbers extend the concept of infinity beyond the familiar infinite set of natural numbers. Cantor's work on different sizes of infinity has profound implications in set theory and the foundations of mathematics.

Human Constructs

While infinity is a powerful tool in mathematics, it's essential to recognize that both math and the concept of infinity are human constructs. Here’s why it’s acceptable and even necessary to embrace infinity in mathematics:

  1. Descriptive Tools: Mathematics is a language developed by humans to describe patterns, relationships, and structures in the universe. Infinity serves as a tool within this language to articulate ideas that involve unbounded growth, endless processes, and limitless quantities.

  2. Abstract Concepts: Math deals with abstract concepts that often extend beyond physical reality. Infinity allows mathematicians to explore these abstractions without the constraints of the finite, enabling deeper insights and more comprehensive theories.

  3. Modeling Reality: While math helps model and understand the universe, it doesn't always reflect the true nature of reality. Infinity, as a concept, is part of this modeling process, helping to simplify and solve complex problems even if actual infinities don't exist in the physical world.

  4. Philosophical Acceptance: Philosophically, accepting infinity as a mathematical construct aligns with the understanding that many mathematical concepts are idealizations. Just as a perfect circle doesn't exist in nature but is a useful idea in geometry, infinity is an idealization that enhances our ability to comprehend and manipulate mathematical phenomena.

Conclusion

In this exploration of infinity as the scientific equivalent of a god, we've delved into its multifaceted role in mathematics, physics, and cosmology. Infinity, much like a deity, serves as a powerful tool to push the boundaries of our understanding and to model the complexities of the universe. However, it also brings forth some provocative challenges that merit closer examination.

Key Points Recap

  1. Infinity as a Placeholder: Infinity is often used to bridge gaps in our knowledge, providing a framework when our current theories and understanding fall short.
  2. Mathematical Utility: In mathematics, infinity is indispensable for understanding limits, calculus, and infinite series, allowing us to describe and work with the concept of the unbounded.
  3. Physics and Cosmology: In physics and cosmology, infinity appears in theories about the universe's size and age, as well as in the study of singularities and black holes.

Challenges

  • Magic Blanket Critique: One of the most compelling critiques is the idea of infinity being used as a "magic blanket" to cover the unknowns. This perspective suggests that invoking infinity can sometimes serve as a way to avoid addressing the deeper, underlying gaps in our understanding. It challenges us to question whether infinity is always a meaningful or necessary component of scientific models, or if it's sometimes a convenient placeholder for the inexplicable.
  • Convenient Tool for Unknowns: Similarly, the criticism that infinity acts as a tool to hide the limits of our knowledge encourages a more rigorous examination of scientific theories. By scrutinizing the reliance on infinity, we can push for more precise and comprehensive explanations rather than settling for abstract constructs.

Final Thoughts

Infinity remains a vital concept in both mathematics and science, driving innovation and expanding our horizons. Its comparison to the concept of a god highlights its dual role as both a bridge to greater understanding and a potential cover for our limitations. This duality is what makes infinity such a fascinating and essential part of scientific inquiry.

Invitation for Further Inquiry

As we continue to explore the mysteries of the universe, we should remain mindful of the provocative challenges posed by the use of infinity. By doing so, we can ensure that our pursuit of knowledge is both profound and honest, pushing the boundaries of human understanding without resorting to convenient abstractions.

Infinity, like any powerful concept, invites us to think deeply and critically, encouraging a relentless quest for truth that transcends the limits of our current comprehension.

References

Citations and Further Reading

  • Barrow, J.D. (2005). The Infinite Book: A Short Guide to the Boundless, Timeless and Endless. Pantheon Books.
  • Stewart, I. (2017). Infinity: A Very Short Introduction. Oxford University Press.
  • Hawking, S., & Penrose, R. (1996). The Nature of Space and Time. Princeton University Press.
  • Livio, M. (2012). Is God a Mathematician? Simon & Schuster.
  • Stanford Encyclopedia of Philosophy: Infinity
  • Khan Academy: Understanding Infinity
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Infinity: The Cosmology God

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Infinity: The Cosmology God

by George Kosmidis / Published 3 months and 1 week ago
Infinity: The Cosmology God

Contents

This article explores the parallel between infinity and the concept of a god in scientific inquiry. Much like a divine entity, infinity serves as a placeholder for the unknown and a tool for pushing the boundaries of exploration, offering both insights and convenient escapes from the limitations of human understanding.

Section 1: Understanding Infinity

Definition and Origins

Infinity is a concept that describes something without any limit or end. In mathematics, it is often represented by the symbol ∞ and is used to signify quantities that are larger than any finite number. Philosophically, infinity pushes us to think about the limitless, the boundless, and the eternal, stretching our imagination beyond the finite experiences of daily life.

The origins of the concept of infinity can be traced back to ancient civilizations. The Greeks, particularly the philosopher Anaximander, pondered the concept of the "apeiron," which means "unlimited" or "infinite." The term was used to describe the boundless nature of the cosmos. Later, Zeno of Elea's paradoxes, like the famous paradox of Achilles and the tortoise, played with the idea of infinity to challenge our understanding of motion and space.

The famous paradox of Achilles and the tortoise, proposed by the ancient Greek philosopher Zeno, is a thought experiment about motion and infinity. In the paradox, Achilles, a swift runner, gives a tortoise a head start in a race. Zeno argues that Achilles will never catch up to the tortoise because whenever Achilles reaches the point where the tortoise was, the tortoise has moved a bit further. This process theoretically continues infinitely, suggesting that Achilles can never overtake the tortoise, highlighting the counterintuitive nature of infinite series and motion.

In mathematics, infinity began to take a more rigorous form during the development of calculus in the 17th century. Mathematicians like Isaac Newton and Gottfried Wilhelm Leibniz used the concept of infinitesimals, quantities that are infinitely small, to develop the foundational principles of calculus.

Historical Context

Infinity has been viewed and used in various ways across different cultures and scientific periods. In ancient India, the concept of infinity was embedded in the religious and philosophical texts. The Jain mathematician Mahavira (around 9th century CE) wrote about different types of infinities, distinguishing between countable and uncountable infinities, long before similar ideas were formalized in the West.

During the Middle Ages in Europe, infinity took on a theological dimension. Medieval scholars grappled with the concept of an infinite God and the paradoxes that arose from considering the nature of the divine and the universe. This period saw a blend of religious and philosophical inquiries into the nature of the infinite.

The Renaissance and the subsequent Scientific Revolution marked a turning point in the understanding of infinity. The work of Galileo Galilei and Johannes Kepler contributed to the mathematical and astronomical exploration of infinite concepts. Galileo’s study of infinite sets and Kepler’s laws of planetary motion highlighted the necessity of considering infinity in scientific models.

In the 19th century, the German mathematician Georg Cantor revolutionized the mathematical understanding of infinity. Cantor developed set theory and introduced the concept of different sizes of infinity, showing that some infinities are larger than others. His work laid the foundation for modern mathematics and our current understanding of the infinite.

Today, infinity remains a crucial concept in both theoretical and applied sciences. It appears in various branches of mathematics, physics, cosmology, and even computer science. From the infinite expanse of the universe to the infinitesimal particles studied in quantum mechanics, infinity continues to challenge and expand the boundaries of human knowledge.

Section 2: Infinity in Physics and Cosmology

Infinite Universe

The concept of an infinite universe has fascinated scientists and philosophers for centuries. The idea posits that the universe extends infinitely in all directions, with no boundaries or edges. This has profound implications for our understanding of space, time, and the very nature of existence.

  1. Implications for Cosmology:

    • Homogeneity and Isotropy: An infinite universe supports the cosmological principle, which states that the universe is homogeneous and isotropic on large scales. This means it looks the same everywhere and in every direction.
    • Multiverse Theory: Infinity opens up the possibility of a multiverse, where an infinite number of universes exist parallel to our own, each with its own physical laws and constants.
    • Endless Exploration: The concept suggests that there is always more to discover, as there are no limits to what the universe contains.
  2. Philosophical Implications:

    • Existential Questions: An infinite universe raises questions about our place in the cosmos and the nature of our existence. If the universe is infinite, what does that mean for the significance of human life?
    • Paradoxes: Infinity leads to paradoxes, such as Olbers' Paradox, which questions why the night sky is dark if there are an infinite number of stars.

Black Holes and Singularities

Black holes are regions of space where gravity is so strong that nothing, not even light, can escape. At the center of a black hole lies a singularity, a point where density becomes infinite and the laws of physics as we know them break down.

  1. The Nature of Singularities:

    • Infinite Density: Singularities are thought to contain mass compressed into an infinitely small space, leading to infinite density and curvature of spacetime.
    • Event Horizon: The boundary surrounding a black hole, known as the event horizon, marks the point beyond which nothing can escape. Inside this boundary, the concept of infinity becomes crucial to understanding the gravitational effects.
  2. Challenges in Physics:

    • Breakdown of General Relativity: At singularities, general relativity, which describes the gravitational force, no longer applies. This breakdown signals the need for a quantum theory of gravity.
    • Information Paradox: The concept of infinity also plays a role in the black hole information paradox, which questions what happens to information that falls into a black hole. Does it get lost forever, or is it somehow preserved?

Challenge

While infinity is a powerful tool in physics and cosmology, it can also be seen as a convenient way to hide our lack of understanding. Critics argue that invoking infinity is like using a "magic blanket" to cover gaps in our knowledge.

  1. Masking the Unknown:

    • Avoiding Deeper Inquiry: By attributing phenomena to infinity, we may be avoiding deeper questions and more thorough investigations. For example, rather than exploring the true nature of singularities, we accept their infinite properties without fully understanding them.
    • Limitations of Current Theories: Relying on infinity highlights the limitations of our current theories. If our mathematical models predict infinities, it could mean that these models are incomplete or need refinement.
  2. Call for New Theories:

    • Quantum Gravity: The issues surrounding black holes and singularities suggest the need for a quantum theory of gravity that can reconcile general relativity with quantum mechanics.
    • Innovative Approaches: Embracing the challenge of infinity should inspire scientists to develop innovative approaches and new theories that can better explain the universe without resorting to infinite concepts.

While the concept of infinity plays a crucial role in our understanding of the universe and black holes, it also serves as a reminder of the limitations of our current knowledge. By recognizing infinity as both a tool and a challenge, we can push the boundaries of science and strive for a deeper understanding of the cosmos.

Section 3: Infinity as a Placeholder for the Unknown

Bridging Gaps in Knowledge

Infinity often serves as a tool to bridge the gaps in our understanding when current theories and knowledge fall short. In physics and cosmology, for instance, the concept of infinity is invoked to describe the vastness of the universe, the behavior of black holes, and the nature of time and space. When scientists encounter phenomena that are beyond the scope of existing models, infinity provides a way to conceptualize these unknowns. It allows us to develop theories that can accommodate extreme scales and conditions, pushing the boundaries of what we can explore and understand.

For example, in the realm of quantum mechanics and general relativity, infinities often appear in equations describing singularities, such as those found at the center of black holes. These infinities signal a breakdown of our current theories, indicating that a new, more comprehensive theory is needed. By using infinity, scientists can continue to work with these models while acknowledging their limitations and the need for further development.

Comparisons to Deity Concepts

The use of infinity in science parallels the concept of a god in religion in several ways. Both serve as placeholders for the unknown and the unexplainable. In religion, a god is often invoked to explain the origins of the universe, the nature of existence, and the meaning of life—areas where human understanding is limited. Similarly, infinity is used in science to grapple with concepts that are beyond our current comprehension.

Just as a deity can represent the ultimate source of knowledge and power, infinity represents the boundless potential of the universe and the endless possibilities for discovery. Both concepts inspire awe and drive the pursuit of deeper understanding, whether through faith or scientific inquiry. By invoking infinity, scientists acknowledge the vastness of what we do not yet know, much like how religious belief acknowledges the mysteries of the divine.

Challenge

Despite its utility, the use of infinity as a placeholder for the unknown has its critics. Some argue that it serves as a convenient tool to hide the limits of our knowledge, allowing scientists to sidestep difficult questions and avoid deeper exploration. This criticism suggests that by relying on infinity, we may be masking our ignorance and delaying the search for more concrete answers.

For instance, when infinities appear in equations, it often indicates that our current theories are incomplete or flawed. Instead of using infinity as a stopgap, critics argue that we should focus on developing new theories and models that eliminate these infinities and provide a more accurate understanding of the phenomena in question. This perspective challenges the scientific community to move beyond the comfort of infinite constructs and strive for more tangible explanations.

Moreover, the invocation of infinity can sometimes lead to philosophical complacency, where the true nature of the universe is deemed unknowable and therefore not worth pursuing further. This "magic blanket" of infinity can stifle innovation and critical thinking, as it creates a sense of finality in areas that are still ripe for exploration.

Section 4: The Mathematical Perspective on Infinity

Infinity in Mathematics

Infinity plays a crucial role in mathematics, providing a framework for understanding and solving problems that involve unbounded processes. Here are a few key areas where infinity is indispensable:

  1. Calculus: Infinity is fundamental to calculus, particularly in the concepts of limits and integrals. For example, when evaluating the limit of a function as it approaches a certain point, infinity helps describe the behavior of the function as it grows without bound. Integrals often extend to infinity, allowing mathematicians to calculate areas under curves that stretch indefinitely.

  2. Limits: The concept of a limit involves approaching a value as closely as desired, without necessarily reaching it. Infinity is used to express limits at the boundaries of possible values, such as in the case of infinite series or functions that grow indefinitely.

  3. Infinite Series: Infinite series are sums of infinitely many terms. They are used to represent numbers, functions, and solutions to equations. For instance, the famous series 1 + 1/2 + 1/4 + 1/8 + ... converges to 2, illustrating how an infinite process can yield a finite result.

  4. Transfinite Numbers: Introduced by Georg Cantor, transfinite numbers extend the concept of infinity beyond the familiar infinite set of natural numbers. Cantor's work on different sizes of infinity has profound implications in set theory and the foundations of mathematics.

Human Constructs

While infinity is a powerful tool in mathematics, it's essential to recognize that both math and the concept of infinity are human constructs. Here’s why it’s acceptable and even necessary to embrace infinity in mathematics:

  1. Descriptive Tools: Mathematics is a language developed by humans to describe patterns, relationships, and structures in the universe. Infinity serves as a tool within this language to articulate ideas that involve unbounded growth, endless processes, and limitless quantities.

  2. Abstract Concepts: Math deals with abstract concepts that often extend beyond physical reality. Infinity allows mathematicians to explore these abstractions without the constraints of the finite, enabling deeper insights and more comprehensive theories.

  3. Modeling Reality: While math helps model and understand the universe, it doesn't always reflect the true nature of reality. Infinity, as a concept, is part of this modeling process, helping to simplify and solve complex problems even if actual infinities don't exist in the physical world.

  4. Philosophical Acceptance: Philosophically, accepting infinity as a mathematical construct aligns with the understanding that many mathematical concepts are idealizations. Just as a perfect circle doesn't exist in nature but is a useful idea in geometry, infinity is an idealization that enhances our ability to comprehend and manipulate mathematical phenomena.

Conclusion

In this exploration of infinity as the scientific equivalent of a god, we've delved into its multifaceted role in mathematics, physics, and cosmology. Infinity, much like a deity, serves as a powerful tool to push the boundaries of our understanding and to model the complexities of the universe. However, it also brings forth some provocative challenges that merit closer examination.

Key Points Recap

  1. Infinity as a Placeholder: Infinity is often used to bridge gaps in our knowledge, providing a framework when our current theories and understanding fall short.
  2. Mathematical Utility: In mathematics, infinity is indispensable for understanding limits, calculus, and infinite series, allowing us to describe and work with the concept of the unbounded.
  3. Physics and Cosmology: In physics and cosmology, infinity appears in theories about the universe's size and age, as well as in the study of singularities and black holes.

Challenges

  • Magic Blanket Critique: One of the most compelling critiques is the idea of infinity being used as a "magic blanket" to cover the unknowns. This perspective suggests that invoking infinity can sometimes serve as a way to avoid addressing the deeper, underlying gaps in our understanding. It challenges us to question whether infinity is always a meaningful or necessary component of scientific models, or if it's sometimes a convenient placeholder for the inexplicable.
  • Convenient Tool for Unknowns: Similarly, the criticism that infinity acts as a tool to hide the limits of our knowledge encourages a more rigorous examination of scientific theories. By scrutinizing the reliance on infinity, we can push for more precise and comprehensive explanations rather than settling for abstract constructs.

Final Thoughts

Infinity remains a vital concept in both mathematics and science, driving innovation and expanding our horizons. Its comparison to the concept of a god highlights its dual role as both a bridge to greater understanding and a potential cover for our limitations. This duality is what makes infinity such a fascinating and essential part of scientific inquiry.

Invitation for Further Inquiry

As we continue to explore the mysteries of the universe, we should remain mindful of the provocative challenges posed by the use of infinity. By doing so, we can ensure that our pursuit of knowledge is both profound and honest, pushing the boundaries of human understanding without resorting to convenient abstractions.

Infinity, like any powerful concept, invites us to think deeply and critically, encouraging a relentless quest for truth that transcends the limits of our current comprehension.

References

Citations and Further Reading

  • Barrow, J.D. (2005). The Infinite Book: A Short Guide to the Boundless, Timeless and Endless. Pantheon Books.
  • Stewart, I. (2017). Infinity: A Very Short Introduction. Oxford University Press.
  • Hawking, S., & Penrose, R. (1996). The Nature of Space and Time. Princeton University Press.
  • Livio, M. (2012). Is God a Mathematician? Simon & Schuster.
  • Stanford Encyclopedia of Philosophy: Infinity
  • Khan Academy: Understanding Infinity
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/integration-tests-in-asp-net-core-api.html b/_output/integration-tests-in-asp-net-core-api.html index 62d3d0ade..000bdbc06 100644 --- a/_output/integration-tests-in-asp-net-core-api.html +++ b/_output/integration-tests-in-asp-net-core-api.html @@ -1,5 +1,5 @@ -Integration Tests in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Integration Tests in ASP.NET Core API

by George Kosmidis / Published 5 years ago, modified 4 years and 2 months ago
Integration Tests in ASP.NET Core API

Automated testing is an important part of modern software production as it ensures higher quality and faster delivery, and on the same time it makes testing more affordable. Integration tests, sitting just between Unit Tests and E2E tests, improve test coverage and ensure proper communication between units. In this post, we will explore the possibilities of integration testing of ASP.NET Core by using xUnit to create a test for multiple endpoints.

What is Integration Testing

During the process of creating a smartphone, the display, the sensors, the lenses, the battery, all of the parts, are produced and tested separately (Unit Testing). When two or more units are ready, they are assembled and Integration Testing is performed. This process is similar to all engineering fields, including of course software engineering where integration tests ensure that an app’s components function correctly at a level that includes the app’s supporting infrastructure, such as the database, file system, and network.

ASP.NET Core supports integration tests using a unit test framework with a test web host and an in-memory test server, so some basic understanding of unit tests is assumed. If you are unfamiliar with test concepts and/or xUnit, check the Unit testing C# in .NET Core using dotnet test and xUnit.

What is xUnit

xUnit is the name of a collection of testing frameworks that became very popular among software developers. They derive their structure and functionality from Smalltalk’s SUnit, which was designed by Kent Beck in 1998. Since it was written in a highly structured object-oriented style, it was easy to be adapted to languages such as Java and C#.

You can read more on how to use xUnit in Microsoft Docs or in xUnit Documenation

Creating the test class

Version 2.1 of .NET Core introduced WebApplicationFactory<TEntryPoint> for bootstrapping an application in memory. This factory can be used to create a TestServer instance using the MVC application defined by TEntryPoint and one or more HttpClient instances used to send HttpRequestMessage to the TestServer. TEntryPoint is the entry point class of the System Under Test, usually the Startup class:

public class IntegrationParallelismTesting
+Integration Tests in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Integration Tests in ASP.NET Core API

by George Kosmidis / Published 5 years ago, modified 4 years and 2 months ago
Integration Tests in ASP.NET Core API

Automated testing is an important part of modern software production as it ensures higher quality and faster delivery, and on the same time it makes testing more affordable. Integration tests, sitting just between Unit Tests and E2E tests, improve test coverage and ensure proper communication between units. In this post, we will explore the possibilities of integration testing of ASP.NET Core by using xUnit to create a test for multiple endpoints.

What is Integration Testing

During the process of creating a smartphone, the display, the sensors, the lenses, the battery, all of the parts, are produced and tested separately (Unit Testing). When two or more units are ready, they are assembled and Integration Testing is performed. This process is similar to all engineering fields, including of course software engineering where integration tests ensure that an app’s components function correctly at a level that includes the app’s supporting infrastructure, such as the database, file system, and network.

ASP.NET Core supports integration tests using a unit test framework with a test web host and an in-memory test server, so some basic understanding of unit tests is assumed. If you are unfamiliar with test concepts and/or xUnit, check the Unit testing C# in .NET Core using dotnet test and xUnit.

What is xUnit

xUnit is the name of a collection of testing frameworks that became very popular among software developers. They derive their structure and functionality from Smalltalk’s SUnit, which was designed by Kent Beck in 1998. Since it was written in a highly structured object-oriented style, it was easy to be adapted to languages such as Java and C#.

You can read more on how to use xUnit in Microsoft Docs or in xUnit Documenation

Creating the test class

Version 2.1 of .NET Core introduced WebApplicationFactory<TEntryPoint> for bootstrapping an application in memory. This factory can be used to create a TestServer instance using the MVC application defined by TEntryPoint and one or more HttpClient instances used to send HttpRequestMessage to the TestServer. TEntryPoint is the entry point class of the System Under Test, usually the Startup class:

public class IntegrationParallelismTesting
 {
     private readonly WebApplicationFactory<Startup> _factory;
     public IntegrationParallelismTesting(WebApplicationFactory<Startup> factory)
@@ -30,4 +30,4 @@
     response.EnsureSuccessStatusCode(); // Status Code 200-299
     Assert.Equal("text/html; charset=utf-8", 
         response.Content.Headers.ContentType.ToString());
-}

Using HttpClient with the using statement can cause a serious issue named ‘sockets exhaustion’. Read more about how to use HttpClientFactory instead!

Conclusion

Unit Tests vs Integration Tests, the battle continuous as it seems the line is not always so clear: Just replace a mock with the real object and you converted a Unit Test to an Integration Test – not always true…

There is a very nice detailed article by Stevens Anderson called Selective Unit Testing – Costs and Benefits that can help clear things out, but I personally always favor Integration Tests, and write Unit Tests in these cases only:

  • Algorithmic logic, e.g. calculations, business rules etc
  • Complex code, e.g. code with many dependenciess
  • Runtime error prone code, e.g. when using reflection
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Using HttpClient with the using statement can cause a serious issue named ‘sockets exhaustion’. Read more about how to use HttpClientFactory instead!

Conclusion

Unit Tests vs Integration Tests, the battle continuous as it seems the line is not always so clear: Just replace a mock with the real object and you converted a Unit Test to an Integration Test – not always true…

There is a very nice detailed article by Stevens Anderson called Selective Unit Testing – Costs and Benefits that can help clear things out, but I personally always favor Integration Tests, and write Unit Tests in these cases only:

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/migrating-to-net-5-a-few-clicks-away.html b/_output/migrating-to-net-5-a-few-clicks-away.html index d10ac9968..68a7a2b96 100644 --- a/_output/migrating-to-net-5-a-few-clicks-away.html +++ b/_output/migrating-to-net-5-a-few-clicks-away.html @@ -1,2 +1,2 @@ -Migrating to .NET 5 – A few clicks away!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Migrating to .NET 5 – A few clicks away!

by George Kosmidis / Published 4 years ago
Migrating to .NET 5 – A few clicks away!

Before you actually start reading this article, I have to be honest with you: Unless your app is a Blazor app, you don’t need to read this; all you need is to download .NET 5, change the target framework in your project properties and that’s it…! Then again, if you need the download links or want to check the process I followed, feel free!

Installing .NET 5

First things first, you can’t use .NET 5 if you don’t have it! Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and select “Download .NET SDK x64” under .NET 5:

Download .NET 5

Download .NET 5 SDK

You can also click here to go directly to the download page for version 5.0.101: https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591/dotnet/thank-you/sdk-5.0.101-windows-x64-installer

Visual Studio Update

Visual Studio will also need an update, since it has to be Visual Studio 2019 16.8 or later. Visit https://visualstudio.microsoft.com/downloads/?WT.mc_id=DT-MVP-5004591 for all the Visual Studio family downloads, and choose the one you like: First on top you will find the classic “Visual Studio 2019”, and if you scroll a bit the latest “Visual Studio Code” and”Visual Studio for Mac“:

Download Visual Studio 2019
Feel free to download your favorite IDE!

Changing framework

Actually that will most probably be the only change you will need to do. Go to your project properties and change to .NET 5:

Upgrade to .NET 5
Upgrade to .NET 5

That’s it!

What makes sense now, is to rebuild everything and check for nuget package updates. Nevertheless, that should most probably conclude the process of updating to .NET 5! Just make sure before you publish your .NET 5 solution that the .NET 5 runtime is installed to wherever you plan to distribute your app.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Migrating to .NET 5 – A few clicks away!

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Migrating to .NET 5 – A few clicks away!

by George Kosmidis / Published 4 years ago
Migrating to .NET 5 – A few clicks away!

Before you actually start reading this article, I have to be honest with you: Unless your app is a Blazor app, you don’t need to read this; all you need is to download .NET 5, change the target framework in your project properties and that’s it…! Then again, if you need the download links or want to check the process I followed, feel free!

Installing .NET 5

First things first, you can’t use .NET 5 if you don’t have it! Visit https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591 and select “Download .NET SDK x64” under .NET 5:

Download .NET 5

Download .NET 5 SDK

You can also click here to go directly to the download page for version 5.0.101: https://dotnet.microsoft.com/download?WT.mc_id=DT-MVP-5004591/dotnet/thank-you/sdk-5.0.101-windows-x64-installer

Visual Studio Update

Visual Studio will also need an update, since it has to be Visual Studio 2019 16.8 or later. Visit https://visualstudio.microsoft.com/downloads/?WT.mc_id=DT-MVP-5004591 for all the Visual Studio family downloads, and choose the one you like: First on top you will find the classic “Visual Studio 2019”, and if you scroll a bit the latest “Visual Studio Code” and”Visual Studio for Mac“:

Download Visual Studio 2019
Feel free to download your favorite IDE!

Changing framework

Actually that will most probably be the only change you will need to do. Go to your project properties and change to .NET 5:

Upgrade to .NET 5
Upgrade to .NET 5

That’s it!

What makes sense now, is to rebuild everything and check for nuget package updates. Nevertheless, that should most probably conclude the process of updating to .NET 5! Just make sure before you publish your .NET 5 solution that the .NET 5 runtime is installed to wherever you plan to distribute your app.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/mocking-expected-behaviour-of-sql-functions-for-unit-testing-with-sqlite.html b/_output/mocking-expected-behaviour-of-sql-functions-for-unit-testing-with-sqlite.html index 880e03453..d17647ce9 100644 --- a/_output/mocking-expected-behaviour-of-sql-functions-for-unit-testing-with-sqlite.html +++ b/_output/mocking-expected-behaviour-of-sql-functions-for-unit-testing-with-sqlite.html @@ -1,8 +1,8 @@ Mocking expected behaviour of SQL functions for Unit Testing with SQLite

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Mocking expected behaviour of SQL functions for Unit Testing with SQLite

by George Kosmidis / Published 7 years ago, modified 5 years and 2 months ago

While unit testing, I came across a method in an SQL repository class that was using a raw SQL query, and along with that, SQL Server’s newid() function. Since the complicated reason behind this decision was out of scope, I had to find a way to unit test that method…

SQLite was -of course- the first approach, but any attempt to actually test the method would nevertheless fail with the exception Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such function: newid'.'.

To go around this, I used SqliteConnection.CreateFunction to bind a custom function to the connection and unit test SQL Queries that include that function (e.g. newid() )

You can see an example of this approach, in the following gist

var options = new DbContextOptionsBuilder()
+ SQLite was -of course- the first approach, but any attempt to actually test the method would nevertheless fail with the exception  Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such function: newid'.' .">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Mocking expected behaviour of SQL functions for Unit Testing with SQLite

by George Kosmidis / Published 7 years ago, modified 5 years and 2 months ago

While unit testing, I came across a method in an SQL repository class that was using a raw SQL query, and along with that, SQL Server’s newid() function. Since the complicated reason behind this decision was out of scope, I had to find a way to unit test that method…

SQLite was -of course- the first approach, but any attempt to actually test the method would nevertheless fail with the exception Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'no such function: newid'.'.

To go around this, I used SqliteConnection.CreateFunction to bind a custom function to the connection and unit test SQL Queries that include that function (e.g. newid() )

You can see an example of this approach, in the following gist

var options = new DbContextOptionsBuilder()
                   .UseSqlite("Data Source=:memory:")
                   .Options;
 var context = new DemoProjectDbContext(options);
@@ -14,4 +14,4 @@
 conn.CreateFunction("newid", () => { return Guid.NewGuid(); });
 context.Database.EnsureCreated();
 
-//Unit test code here...

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +//Unit test code here...

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/mongodb-shell-or-compass-query-with-a-guid.html b/_output/mongodb-shell-or-compass-query-with-a-guid.html index fb764c8a9..c7e699a76 100644 --- a/_output/mongodb-shell-or-compass-query-with-a-guid.html +++ b/_output/mongodb-shell-or-compass-query-with-a-guid.html @@ -1,5 +1,5 @@ -MongoDB Shell or Compass query with a GUID

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

MongoDB Shell or Compass query with a GUID

by George Kosmidis / Published 3 years ago
MongoDB Shell or Compass query with a GUID

Just a small one for today. Have you ever tried to query MongoDB with a GUID? Well I did and it can be confusing!

Problem

Some time ago I created a project for storing product prices but for multiple markets around the world. Markets would be a dynamic thing, meaning different ones being added every once and a while, and old ones potentially removed. Since the data to be stored were fairly simple, I was lead to a design featuring one documentDB per market. The document-oriented database selected was MongoDB, but I always had in mind a future move to Azure Cosmos DB, so avoiding vendor lock was a requirement. That thought alone and the fact that a unique ID through out all databases for each price would be a nice to have, made me decide for a GUID instead of MongoBD’s ObjectId().

ObjectIds are small, likely unique, fast to generate, and ordered. ObjectId values are 12 bytes in length, consisting of:

  • 4-byte timestamp value, representing the ObjectId’s creation, measured in seconds since the Unix epoch
  • 5-byte random value generated once per process. This random value is unique to the machine and process.
  • 3-byte incrementing counter, initialized to a random value

The schema of the document is not very important other than the fact that the ID should be of type GUID:

    public class PriceSet
+MongoDB Shell or Compass query with a GUID

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

MongoDB Shell or Compass query with a GUID

by George Kosmidis / Published 3 years ago
MongoDB Shell or Compass query with a GUID

Just a small one for today. Have you ever tried to query MongoDB with a GUID? Well I did and it can be confusing!

Problem

Some time ago I created a project for storing product prices but for multiple markets around the world. Markets would be a dynamic thing, meaning different ones being added every once and a while, and old ones potentially removed. Since the data to be stored were fairly simple, I was lead to a design featuring one documentDB per market. The document-oriented database selected was MongoDB, but I always had in mind a future move to Azure Cosmos DB, so avoiding vendor lock was a requirement. That thought alone and the fact that a unique ID through out all databases for each price would be a nice to have, made me decide for a GUID instead of MongoBD’s ObjectId().

ObjectIds are small, likely unique, fast to generate, and ordered. ObjectId values are 12 bytes in length, consisting of:

  • 4-byte timestamp value, representing the ObjectId’s creation, measured in seconds since the Unix epoch
  • 5-byte random value generated once per process. This random value is unique to the machine and process.
  • 3-byte incrementing counter, initialized to a random value

The schema of the document is not very important other than the fact that the ID should be of type GUID:

    public class PriceSet
     {
         [BsonId]
         public Guid Id { get; init set; }
@@ -11,4 +11,4 @@
 if (Convert.TryFromBase64String("YOUR_BASE64_STRING_HERE", bytes, out int bytesWritten))
 {
   var guidDecoded = new Guid(bytes.Slice(0, bytesWritten).ToArray()).ToString();
-}

Finally, if you just need it now without writing code use a Blazor WebAssembly app I made just for this: https://base64guid.azurewebsites.net/. It’s open source and the code is available in Github.

And if it is a bit slow on startup, be patient! Dev/Test Service Plan doesn’t allow Always On!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Finally, if you just need it now without writing code use a Blazor WebAssembly app I made just for this: https://base64guid.azurewebsites.net/. It’s open source and the code is available in Github.

And if it is a bit slow on startup, be patient! Dev/Test Service Plan doesn’t allow Always On!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/mvc-custom-authorizeattribute-for-custom-authentication.html b/_output/mvc-custom-authorizeattribute-for-custom-authentication.html index ad3f8674a..2c02d909a 100644 --- a/_output/mvc-custom-authorizeattribute-for-custom-authentication.html +++ b/_output/mvc-custom-authorizeattribute-for-custom-authentication.html @@ -1,5 +1,5 @@ -ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

by George Kosmidis / Published 10 years and 4 months ago, modified 3 years ago

In a previous post I wrote about how you can should protect your web app from human errors by enforcing authentication by default.

In this, lets check how to write your very own custom AuthorizeAttribute!

Since adding the AuthorizeAttribute to every action involves global filters, we can use that to add our own custom authentication, by inheriting AuthorizeAttributeand overriding the AuthorizeCore and HandleUnauthorizeRequest methods.

We ‘ll start by adding a new .cs file (I also add a folder Attributes for all custom attributes) with the following code (read the comments for explanation):

using System;
+ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

ASP.NET MVC 5: Custom AuthorizeAttribute for custom authentication

by George Kosmidis / Published 10 years and 4 months ago, modified 3 years ago

In a previous post I wrote about how you can should protect your web app from human errors by enforcing authentication by default.

In this, lets check how to write your very own custom AuthorizeAttribute!

Since adding the AuthorizeAttribute to every action involves global filters, we can use that to add our own custom authentication, by inheriting AuthorizeAttributeand overriding the AuthorizeCore and HandleUnauthorizeRequest methods.

We ‘ll start by adding a new .cs file (I also add a folder Attributes for all custom attributes) with the following code (read the comments for explanation):

using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
@@ -52,4 +52,4 @@
 
   //No Authentication at all
   [AllowAnonymous]
-  public ActionResult DoSomething( [DataSourceRequest]DataSourceRequest request ) 

* You should also read “ASP.NET MVC 5: “Authorization” by default for your web app” to understand the commend //No Annotation, user must be logged in!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file + public ActionResult DoSomething( [DataSourceRequest]DataSourceRequest request )

* You should also read “ASP.NET MVC 5: “Authorization” by default for your web app” to understand the commend //No Annotation, user must be logged in!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/net-6-a-guide-for-the-high-impact-breaking-changes.html b/_output/net-6-a-guide-for-the-high-impact-breaking-changes.html index bca35f1ec..ddef715a1 100644 --- a/_output/net-6-a-guide-for-the-high-impact-breaking-changes.html +++ b/_output/net-6-a-guide-for-the-high-impact-breaking-changes.html @@ -1,2 +1,2 @@ -.NET 6, A guide for the high impact Breaking Changes

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

.NET 6, A guide for the high impact Breaking Changes

by George Kosmidis / Published 3 years ago
.NET 6, A guide for the high impact Breaking Changes

.NET 6 is the first Long-Term-Support (LTS) version since the “one .NET to rule them all” era, which means it’s plan as future-proof. It includes a tone of improvements and changes that are planned to live long, thing that brought with it a few high impact Breaking Changes. Although there are lower impact braking changes too, this guide will help you identify if any of the important ones really affect you, and provide a suggestion at the same time.

.NET 6 is the fastest full stack web framework, which lowers compute costs if you’re running in the cloud, and with Visual Studio 2022 provides hot reload, new git tooling, intelligent code editing, robust diagnostics and testing tools, and better team collaboration. C# 10, while focused on microservices, was simplified by reducing the amount of code you need to write!

Source Code compatible changes

The following group of breaking changes require no change in your code and thus they are the easiest ones! The changes are grouped by technology area

ASP.NET Core

Assemblies removed

Breaking Change
The following assemblies were removed from Microsoft.AspNetCore.App shared framework: System.Security.Permissions, System.Windows.Extensions, Microsoft.Win32.SystemEvents, System.Drawing.Common, System.Security.Permissions, System.Windows.Extensions
Solution
Please manually add the equivalent reference

Middleware: New Use overload

Breaking Change
A new overload of app.Use has been introduced. If you call app.Use but never call the next middleware, you’ll now get compiler error CS0121:
The call is ambiguous between the following methods or properties: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' and 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'
Solution
To resolve the error, use app.Run instead of app.Use.

MVC doesn’t buffer IAsyncEnumerable types when using System.Text.Json

Breaking Change
When formatting using System.Text.Json, MVC no longer buffers IAsyncEnumerable<T> instances.
Solution
If your application requires buffering, consider manually buffering the IAsyncEnumerable<T> object by using, for example, ToListAsync();.

Core .NET libraries

Nullable reference type annotations changed

Breaking Change
The affected APIs had incorrect nullable reference type annotations with build warnings being either absent or incorrect. New build warnings are produced and incorrect build warnings are no longer produced for those APIs. The following list contains the most common APIs that have a breaking change:
  • Methods that override Object.Equals(Object)
  • ImmutableArray<T>.Equals(Object)
  • EntityHandle.Equals(Object)
  • GuidHandle.Equals(Object)
  • Handle.Equals(Object)
  • Label.Equals(Object)
  • DateOnly.Equals(System.Object)
  • TimeOnly.Equals(System.Object)
For a full list visit Microsoft Docs.
Solution
Update code that calls these APIs to reflect the revised nullability contracts.

API obsoletions with non-default diagnostic IDs

Breaking Change
Use of WebRequest, HttpWebRequest, ServicePoint, and WebClient produces an error with a custom diagnostic ID.

An even bigger list of APIs has become obsolete and produces warnings. For a full list of these APIs visit Microsoft Docs.


Solution
Use HttpClient instead.

Older framework versions dropped from package

Breaking Change
Starting with .NET 6 Preview 5, the core libraries packages can no longer be installed into projects whose target framework is older than:
  • .NET Framework 4.6.1
  • .NET Core 3.1
  • .NET Standard 2.0

Solution
Upgrade your project to a newer version of .NET

Unhandled exceptions from a BackgroundService

Breaking Change
In previous versions, when a BackgroundService throws an unhandled exception, the exception is lost and the service appears unresponsive. .NET 6 fixes this behavior by logging the exception and stopping the host.
Solution
If you prefer to keep the previous behavior of allowing an unhandled exception in a BackgroundService to not stop the Host, you can set HostOptions.BackgroundServiceExceptionBehavior to BackgroundServiceExceptionBehavior.Ignore.

System.Text.Json IAsyncEnumerable serialization

Breaking Change
Asynchronous serialization methods now enumerate any IAsyncEnumerable<T> instances in an object graph and then serialize them as JSON arrays. Synchronous serializations methods do not support IAsyncEnumerable<T> serialization and throw a NotSupportedException.
Solution
Check if your serialization models contain types that implement IAsyncEnumerable<T> and determine if emitting the enumeration in the JSON output is desirable. You can disable IAsyncEnumerable<T> serialization in one of the following ways:

  • Attach a JsonIgnoreAttribute to the property containing the IAsyncEnumerable<T>.
  • Define a custom converter factory that serializes IAsyncEnumerable<T> instances as empty JSON objects.

EF Core 6

Nested optional dependents sharing a table and with no required properties are disallowed

Breaking Change
Models with nested optional dependents sharing a table and with no required properties were allowed, but could result in data loss when querying for the data and then saving again. To prevent this, a new exception will be thrown
Solution
Avoid using optional dependents sharing a table and with no required properties. There are three easy ways to do this:

  • Make the dependents required. This means that the dependent entity will always have a value after it is queried, even if all its properties are null.
  • Make sure that the dependent contains at least one required property.
  • Map optional dependents to their own table, instead of sharing a table with the principal.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +.NET 6, A guide for the high impact Breaking Changes

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

.NET 6, A guide for the high impact Breaking Changes

by George Kosmidis / Published 3 years ago
.NET 6, A guide for the high impact Breaking Changes

.NET 6 is the first Long-Term-Support (LTS) version since the “one .NET to rule them all” era, which means it’s plan as future-proof. It includes a tone of improvements and changes that are planned to live long, thing that brought with it a few high impact Breaking Changes. Although there are lower impact braking changes too, this guide will help you identify if any of the important ones really affect you, and provide a suggestion at the same time.

.NET 6 is the fastest full stack web framework, which lowers compute costs if you’re running in the cloud, and with Visual Studio 2022 provides hot reload, new git tooling, intelligent code editing, robust diagnostics and testing tools, and better team collaboration. C# 10, while focused on microservices, was simplified by reducing the amount of code you need to write!

Source Code compatible changes

The following group of breaking changes require no change in your code and thus they are the easiest ones! The changes are grouped by technology area

ASP.NET Core

Assemblies removed

Breaking Change
The following assemblies were removed from Microsoft.AspNetCore.App shared framework: System.Security.Permissions, System.Windows.Extensions, Microsoft.Win32.SystemEvents, System.Drawing.Common, System.Security.Permissions, System.Windows.Extensions
Solution
Please manually add the equivalent reference

Middleware: New Use overload

Breaking Change
A new overload of app.Use has been introduced. If you call app.Use but never call the next middleware, you’ll now get compiler error CS0121:
The call is ambiguous between the following methods or properties: 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, Func, Task>)' and 'UseExtensions.Use(IApplicationBuilder, Func<HttpContext, RequestDelegate, Task>)'
Solution
To resolve the error, use app.Run instead of app.Use.

MVC doesn’t buffer IAsyncEnumerable types when using System.Text.Json

Breaking Change
When formatting using System.Text.Json, MVC no longer buffers IAsyncEnumerable<T> instances.
Solution
If your application requires buffering, consider manually buffering the IAsyncEnumerable<T> object by using, for example, ToListAsync();.

Core .NET libraries

Nullable reference type annotations changed

Breaking Change
The affected APIs had incorrect nullable reference type annotations with build warnings being either absent or incorrect. New build warnings are produced and incorrect build warnings are no longer produced for those APIs. The following list contains the most common APIs that have a breaking change:
  • Methods that override Object.Equals(Object)
  • ImmutableArray<T>.Equals(Object)
  • EntityHandle.Equals(Object)
  • GuidHandle.Equals(Object)
  • Handle.Equals(Object)
  • Label.Equals(Object)
  • DateOnly.Equals(System.Object)
  • TimeOnly.Equals(System.Object)
For a full list visit Microsoft Docs.
Solution
Update code that calls these APIs to reflect the revised nullability contracts.

API obsoletions with non-default diagnostic IDs

Breaking Change
Use of WebRequest, HttpWebRequest, ServicePoint, and WebClient produces an error with a custom diagnostic ID.

An even bigger list of APIs has become obsolete and produces warnings. For a full list of these APIs visit Microsoft Docs.


Solution
Use HttpClient instead.

Older framework versions dropped from package

Breaking Change
Starting with .NET 6 Preview 5, the core libraries packages can no longer be installed into projects whose target framework is older than:
  • .NET Framework 4.6.1
  • .NET Core 3.1
  • .NET Standard 2.0

Solution
Upgrade your project to a newer version of .NET

Unhandled exceptions from a BackgroundService

Breaking Change
In previous versions, when a BackgroundService throws an unhandled exception, the exception is lost and the service appears unresponsive. .NET 6 fixes this behavior by logging the exception and stopping the host.
Solution
If you prefer to keep the previous behavior of allowing an unhandled exception in a BackgroundService to not stop the Host, you can set HostOptions.BackgroundServiceExceptionBehavior to BackgroundServiceExceptionBehavior.Ignore.

System.Text.Json IAsyncEnumerable serialization

Breaking Change
Asynchronous serialization methods now enumerate any IAsyncEnumerable<T> instances in an object graph and then serialize them as JSON arrays. Synchronous serializations methods do not support IAsyncEnumerable<T> serialization and throw a NotSupportedException.
Solution
Check if your serialization models contain types that implement IAsyncEnumerable<T> and determine if emitting the enumeration in the JSON output is desirable. You can disable IAsyncEnumerable<T> serialization in one of the following ways:

  • Attach a JsonIgnoreAttribute to the property containing the IAsyncEnumerable<T>.
  • Define a custom converter factory that serializes IAsyncEnumerable<T> instances as empty JSON objects.

EF Core 6

Nested optional dependents sharing a table and with no required properties are disallowed

Breaking Change
Models with nested optional dependents sharing a table and with no required properties were allowed, but could result in data loss when querying for the data and then saving again. To prevent this, a new exception will be thrown
Solution
Avoid using optional dependents sharing a table and with no required properties. There are three easy ways to do this:

  • Make the dependents required. This means that the dependent entity will always have a value after it is queried, even if all its properties are null.
  • Make sure that the dependent contains at least one required property.
  • Map optional dependents to their own table, instead of sharing a table with the principal.
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/parameterized-raw-sql-queries-with-entity-framework-how-to-unit-test-with-sqlite.html b/_output/parameterized-raw-sql-queries-with-entity-framework-how-to-unit-test-with-sqlite.html index ea1986334..f15e3846f 100644 --- a/_output/parameterized-raw-sql-queries-with-entity-framework-how-to-unit-test-with-sqlite.html +++ b/_output/parameterized-raw-sql-queries-with-entity-framework-how-to-unit-test-with-sqlite.html @@ -1,5 +1,5 @@ -Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

by George Kosmidis / Published 6 years and 5 months ago, modified 4 years and 2 months ago

Entity Framework Core allows you to drop down to raw SQL queries when working with a relational database. This can be useful, because raw SQL queries can return entity types or, starting with EF Core 2.1, query types that are part of your model, but it could also be a problem when it comes down to Unit Testing.

You can read more about Raw SQL Queries here: https://docs.microsoft.com/en-us/ef/core/querying/raw-sql?WT.mc_id=DT-MVP-5004591

By using raw SQL queries though, in any case, it is important to remember to parameterize user input to protect your system from SQL injection attacks.

Read more about SQL Injections in this Microsoft article and in this OWASP page

For example, the following gist file contains a basic raw SQL Query that is using user input the wrong way, and thus, it’s vulnerable to SQL Injection attacks:

var username = "george";//coming from UI
+Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Parameterized Raw SQL Queries with Entity Framework: How to Unit Test with SQLite

by George Kosmidis / Published 6 years and 5 months ago, modified 4 years and 2 months ago

Entity Framework Core allows you to drop down to raw SQL queries when working with a relational database. This can be useful, because raw SQL queries can return entity types or, starting with EF Core 2.1, query types that are part of your model, but it could also be a problem when it comes down to Unit Testing.

You can read more about Raw SQL Queries here: https://docs.microsoft.com/en-us/ef/core/querying/raw-sql?WT.mc_id=DT-MVP-5004591

By using raw SQL queries though, in any case, it is important to remember to parameterize user input to protect your system from SQL injection attacks.

Read more about SQL Injections in this Microsoft article and in this OWASP page

For example, the following gist file contains a basic raw SQL Query that is using user input the wrong way, and thus, it’s vulnerable to SQL Injection attacks:

var username = "george";//coming from UI
 
 var blogs = context.Blogs
     .FromSql("SELECT * FROM dbo.Blogs WHERE username = '" +username+"'") // <- vulnerable to sql injection attacks
@@ -15,4 +15,4 @@
 
 var blogs = context.Blogs
     .FromSql(@"SELECT * FROM dbo.Blogs WHERE username = {username}")
-    .ToList();

Same as the previous approach, the supplied value is wrapped in a parameter and the generated parameter name inserted where the {0} placeholder was specified.

The last two approaches, actually allow .NET to wrap the supplied value with the appropriate parameter for each dbContext: SqlClient.SqlParameter for your running app, Sqlite.SqliteParameter for your tests!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file + .ToList();

Same as the previous approach, the supplied value is wrapped in a parameter and the generated parameter name inserted where the {0} placeholder was specified.

The last two approaches, actually allow .NET to wrap the supplied value with the appropriate parameter for each dbContext: SqlClient.SqlParameter for your running app, Sqlite.SqliteParameter for your tests!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/privacy.html b/_output/privacy.html index 08c58d025..ea244f518 100644 --- a/_output/privacy.html +++ b/_output/privacy.html @@ -1,2 +1,2 @@ -Privacy Policy

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Privacy Policy

Effective date: December 25, 2021

George Kosmidis ("we", "our", or "us", ) operates "https://blog.georgekosmidis.net" website (the "Service").

This page informs you of the policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.

Definitions

  • Service

    Service is the "https://blog.georgekosmidis.net" website operated by George Kosmidis, an Individual.

  • Personal Data

    Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).

  • Usage Data

    Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).

  • Cookies

    Cookies are small pieces of data stored on your device (computer or mobile device).

  • Data Controller

    Data Controller means the natural or legal person who (either alone or jointly or in common with other persons) determines the purposes for which and the manner in which any personal information are, or are to be, processed.

    For the purpose of this Privacy Policy, we are a Data Controller of your Personal Data.

  • Data Processors (or Service Providers)

    Data Processor (or Service Provider) means any natural or legal person who processes the data on behalf of the Data Controller.

    We may use the services of various Service Providers in order to process your data more effectively.

  • Data Subject (or User)

    Data Subject is any living individual who is using our Service and is the subject of Personal Data.

Information Collection and Use

We collect several different types of information for various purposes to provide and improve our Service to you.

Types of Data Collected

Personal Data

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:

  • Cookies and Usage Data

Usage Data

We may also collect information how the Service is accessed and used ("Usage Data"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

Tracking & Cookies Data

We use cookies and similar tracking technologies to track the activity on our Service and hold certain information.

Cookies are files with small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Tracking technologies also used are beacons, tags, and scripts to collect and track information and to improve and analyze our Service.

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

Examples of Cookies we use:

  • Session Cookies. We use Session Cookies to operate our Service.
  • Preference Cookies. We use Preference Cookies to remember your preferences and various settings.
  • Security Cookies. We use Security Cookies for security purposes.
  • Advertising Cookies. Advertising Cookies are used to serve you with advertisements that may be relevant to you and your interests.

Use of Data

George Kosmidis's Blog uses the collected data for various purposes:

  • To provide and maintain our Service
  • To notify you about changes to our Service
  • To allow you to participate in interactive features of our Service when you choose to do so
  • To provide customer support
  • To gather analysis or valuable information so that we can improve our Service
  • To monitor the usage of our Service
  • To detect, prevent and address technical issues

Legal Basis for Processing Personal Data Under General Data Protection Regulation (GDPR)

If you are from the European Economic Area (EEA), George Kosmidis's Blog legal basis for collecting and using the personal information described in this Privacy Policy depends on the Personal Data we collect and the specific context in which we collect it.

George Kosmidis's Blog may process your Personal Data because:

  • We need to perform a contract with you
  • You have given us permission to do so
  • The processing is in our legitimate interests and it's not overridden by your rights
  • To comply with the law

Retention of Data

George Kosmidis's Blog will retain your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

George Kosmidis's Blog will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of our Service, or we are legally obligated to retain this data for longer time periods.

Transfer of Data

Your information, including Personal Data, may be transferred to - and maintained on - computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.

If you are located outside United States and choose to provide information to us, please note that we transfer the data, including Personal Data, to United States and process it there.

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.

George Kosmidis's Blog will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.

Disclosure of Data

Legal Requirements

George Kosmidis's Blog may disclose your Personal Data in the good faith belief that such action is necessary to:

  • To comply with a legal obligation
  • To protect and defend the rights or property of George Kosmidis's Blog
  • To prevent or investigate possible wrongdoing in connection with the Service
  • To protect the personal safety of users of the Service or the public
  • To protect against legal liability

Security of Data

The security of your data is important to us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

"Do Not Track" Signals

We do not support Do Not Track ("DNT"). Do Not Track is a preference you can set in your web browser to inform websites that you do not want to be tracked.

You can enable or disable Do Not Track by visiting the Preferences or Settings page of your web browser.

Your Data Protection Rights Under General Data Protection Regulation (GDPR)

If you are a resident of the European Economic Area (EEA), you have certain data protection rights. George Kosmidis's Blog aims to take reasonable steps to allow you to correct, amend, delete, or limit the use of your Personal Data.

If you wish to be informed what Personal Data we hold about you and if you want it to be removed from our systems, please contact us.

In certain circumstances, you have the following data protection rights:

  • The right to access, update or to delete the information we have on you. Whenever made possible, you can access, update or request deletion of your Personal Data directly within your account settings section. If you are unable to perform these actions yourself, please contact us to assist you.

  • The right of rectification. You have the right to have your information rectified if that information is inaccurate or incomplete.

  • The right to object. You have the right to object to our processing of your Personal Data.

  • The right of restriction. You have the right to request that we restrict the processing of your personal information.

  • The right to data portability. You have the right to be provided with a copy of the information we have on you in a structured, machine-readable and commonly used format.

  • The right to withdraw consent. You also have the right to withdraw your consent at any time where George Kosmidis's Blog relied on your consent to process your personal information.

Please note that we may ask you to verify your identity before responding to such requests.

You have the right to complain to a Data Protection Authority about our collection and use of your Personal Data. For more information, please contact your local data protection authority in the European Economic Area (EEA).

Service Providers

We may employ third party companies and individuals to facilitate our Service ("Service Providers"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

Analytics

We may use third-party Service Providers to monitor and analyze the use of our Service.

  • Google Analytics

    Google Analytics is a web analytics service offered by Google that tracks and reports website traffic. Google uses the data collected to track and monitor the use of our Service. This data is shared with other Google services. Google may use the collected data to contextualize and personalize the ads of its own advertising network.

    You can opt-out of having made your activity on the Service available to Google Analytics by installing the Google Analytics opt-out browser add-on. The add-on prevents the Google Analytics JavaScript (ga.js, analytics.js, and dc.js) from sharing information with Google Analytics about visits activity.

    For more information on the privacy practices of Google, please visit the Google Privacy & Terms web page: https://policies.google.com/privacy?hl=en

Advertising

We may use third-party Service Providers to show advertisements to you to help support and maintain our Service.

  • Google AdSense & DoubleClick Cookie

    Google, as a third party vendor, uses cookies to serve ads on our Service. Google's use of the DoubleClick cookie enables it and its partners to serve ads to our users based on their visit to our Service or other websites on the Internet.

    You may opt out of the use of the DoubleClick Cookie for interest-based advertising by visiting the Google Ads Settings web page: http://www.google.com/ads/preferences/

Links to Other Sites

Our Service may contain links to other sites that are not operated by us. If you click on a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

Children's Privacy

Our Service does not address anyone under the age of 18 ("Children").

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

Contact Us

If you have any questions about this Privacy Policy, please contact us, there are a few ways to reach out:

 
\ No newline at end of file +Privacy Policy

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Privacy Policy

Effective date: December 25, 2021

George Kosmidis ("we", "our", or "us", ) operates "https://blog.georgekosmidis.net" website (the "Service").

This page informs you of the policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.

Definitions

  • Service

    Service is the "https://blog.georgekosmidis.net" website operated by George Kosmidis, an Individual.

  • Personal Data

    Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).

  • Usage Data

    Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).

  • Cookies

    Cookies are small pieces of data stored on your device (computer or mobile device).

  • Data Controller

    Data Controller means the natural or legal person who (either alone or jointly or in common with other persons) determines the purposes for which and the manner in which any personal information are, or are to be, processed.

    For the purpose of this Privacy Policy, we are a Data Controller of your Personal Data.

  • Data Processors (or Service Providers)

    Data Processor (or Service Provider) means any natural or legal person who processes the data on behalf of the Data Controller.

    We may use the services of various Service Providers in order to process your data more effectively.

  • Data Subject (or User)

    Data Subject is any living individual who is using our Service and is the subject of Personal Data.

Information Collection and Use

We collect several different types of information for various purposes to provide and improve our Service to you.

Types of Data Collected

Personal Data

While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:

  • Cookies and Usage Data

Usage Data

We may also collect information how the Service is accessed and used ("Usage Data"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

Tracking & Cookies Data

We use cookies and similar tracking technologies to track the activity on our Service and hold certain information.

Cookies are files with small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Tracking technologies also used are beacons, tags, and scripts to collect and track information and to improve and analyze our Service.

You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.

Examples of Cookies we use:

  • Session Cookies. We use Session Cookies to operate our Service.
  • Preference Cookies. We use Preference Cookies to remember your preferences and various settings.
  • Security Cookies. We use Security Cookies for security purposes.
  • Advertising Cookies. Advertising Cookies are used to serve you with advertisements that may be relevant to you and your interests.

Use of Data

George Kosmidis's Blog uses the collected data for various purposes:

  • To provide and maintain our Service
  • To notify you about changes to our Service
  • To allow you to participate in interactive features of our Service when you choose to do so
  • To provide customer support
  • To gather analysis or valuable information so that we can improve our Service
  • To monitor the usage of our Service
  • To detect, prevent and address technical issues

Legal Basis for Processing Personal Data Under General Data Protection Regulation (GDPR)

If you are from the European Economic Area (EEA), George Kosmidis's Blog legal basis for collecting and using the personal information described in this Privacy Policy depends on the Personal Data we collect and the specific context in which we collect it.

George Kosmidis's Blog may process your Personal Data because:

  • We need to perform a contract with you
  • You have given us permission to do so
  • The processing is in our legitimate interests and it's not overridden by your rights
  • To comply with the law

Retention of Data

George Kosmidis's Blog will retain your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

George Kosmidis's Blog will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of our Service, or we are legally obligated to retain this data for longer time periods.

Transfer of Data

Your information, including Personal Data, may be transferred to - and maintained on - computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.

If you are located outside United States and choose to provide information to us, please note that we transfer the data, including Personal Data, to United States and process it there.

Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.

George Kosmidis's Blog will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.

Disclosure of Data

Legal Requirements

George Kosmidis's Blog may disclose your Personal Data in the good faith belief that such action is necessary to:

  • To comply with a legal obligation
  • To protect and defend the rights or property of George Kosmidis's Blog
  • To prevent or investigate possible wrongdoing in connection with the Service
  • To protect the personal safety of users of the Service or the public
  • To protect against legal liability

Security of Data

The security of your data is important to us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.

"Do Not Track" Signals

We do not support Do Not Track ("DNT"). Do Not Track is a preference you can set in your web browser to inform websites that you do not want to be tracked.

You can enable or disable Do Not Track by visiting the Preferences or Settings page of your web browser.

Your Data Protection Rights Under General Data Protection Regulation (GDPR)

If you are a resident of the European Economic Area (EEA), you have certain data protection rights. George Kosmidis's Blog aims to take reasonable steps to allow you to correct, amend, delete, or limit the use of your Personal Data.

If you wish to be informed what Personal Data we hold about you and if you want it to be removed from our systems, please contact us.

In certain circumstances, you have the following data protection rights:

  • The right to access, update or to delete the information we have on you. Whenever made possible, you can access, update or request deletion of your Personal Data directly within your account settings section. If you are unable to perform these actions yourself, please contact us to assist you.

  • The right of rectification. You have the right to have your information rectified if that information is inaccurate or incomplete.

  • The right to object. You have the right to object to our processing of your Personal Data.

  • The right of restriction. You have the right to request that we restrict the processing of your personal information.

  • The right to data portability. You have the right to be provided with a copy of the information we have on you in a structured, machine-readable and commonly used format.

  • The right to withdraw consent. You also have the right to withdraw your consent at any time where George Kosmidis's Blog relied on your consent to process your personal information.

Please note that we may ask you to verify your identity before responding to such requests.

You have the right to complain to a Data Protection Authority about our collection and use of your Personal Data. For more information, please contact your local data protection authority in the European Economic Area (EEA).

Service Providers

We may employ third party companies and individuals to facilitate our Service ("Service Providers"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.

These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.

Analytics

We may use third-party Service Providers to monitor and analyze the use of our Service.

  • Google Analytics

    Google Analytics is a web analytics service offered by Google that tracks and reports website traffic. Google uses the data collected to track and monitor the use of our Service. This data is shared with other Google services. Google may use the collected data to contextualize and personalize the ads of its own advertising network.

    You can opt-out of having made your activity on the Service available to Google Analytics by installing the Google Analytics opt-out browser add-on. The add-on prevents the Google Analytics JavaScript (ga.js, analytics.js, and dc.js) from sharing information with Google Analytics about visits activity.

    For more information on the privacy practices of Google, please visit the Google Privacy & Terms web page: https://policies.google.com/privacy?hl=en

Advertising

We may use third-party Service Providers to show advertisements to you to help support and maintain our Service.

  • Google AdSense & DoubleClick Cookie

    Google, as a third party vendor, uses cookies to serve ads on our Service. Google's use of the DoubleClick cookie enables it and its partners to serve ads to our users based on their visit to our Service or other websites on the Internet.

    You may opt out of the use of the DoubleClick Cookie for interest-based advertising by visiting the Google Ads Settings web page: http://www.google.com/ads/preferences/

Links to Other Sites

Our Service may contain links to other sites that are not operated by us. If you click on a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

Children's Privacy

Our Service does not address anyone under the age of 18 ("Children").

We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.

We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

Contact Us

If you have any questions about this Privacy Policy, please contact us, there are a few ways to reach out:

 
\ No newline at end of file diff --git a/_output/publish-a-containerized-dotnet-core-app-using-docker-azure-devops-azure-container-registry-and-azure-app-service.html b/_output/publish-a-containerized-dotnet-core-app-using-docker-azure-devops-azure-container-registry-and-azure-app-service.html index 8165294f6..b5a67ccd6 100644 --- a/_output/publish-a-containerized-dotnet-core-app-using-docker-azure-devops-azure-container-registry-and-azure-app-service.html +++ b/_output/publish-a-containerized-dotnet-core-app-using-docker-azure-devops-azure-container-registry-and-azure-app-service.html @@ -1,2 +1,2 @@ -Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

by George Kosmidis / Published 4 years and 3 months ago
Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

This is a guide on how to use Azure DevOps to build and then publish a docker image as an Azure App Service, using Azure Container Registry.

Prerequisites

This guide assumes basic knowledge in Docker and more specifically how to create a Dockerfile. This docker cheat sheet provides a ready Dockerfile with explanations, plus an easy way to create your own Dockerfile from within Visual Studio. The guide also requires an account on Azure and Azure DevOps. The code is hosted in Azure DevOps, but almost any -accessible from Azure DevOps- version control system will do.

In the process that follows, we setup three things mainly; An Azure Container Registry to hold the Docker Image, an Azure DevOps Pipeline to build and push the image to the registry, and and Azure App Service that will continuously pull the image from the registry.

Steps to setup Azure Container Registry

In order to setup an Azure Container Registry, you will of course need to visit portal.azure.com first. After signing in, follow the next three steps to setup and configure Azure Container Registry correctly:

Step 1

Use the convenient search bar on top to search for “Container Registry“. Once the results are in, click on the left side on the “Container Registry” result, as shown here:

Azure Container Registry - Search
Azure Container Registry - Search

Step 2

Once you clicked on the correct result, the “Create Container Registry” form will appear and a few selections have to be made. The minimum changes required here, are to select the Subscription and Resource group you wish (you can also create a new recourse), and to write the Registry name you prefer. Change the Location and SKU if needed and click Create once done.

Azure Container Registry - Create
Azure Container Registry - Create

The Registry name is part of the Login Server for your Azure Container Registry. In this example it will be registryaspnetcoredockerdemo.azurecr.io.

Step 3

Enable the Admin user for this Container Registry. Although the admin account is designed for a single user to access the registry, mainly for testing purposes, in order to be able to use the current registry from an App Service and select image source and Continuous Deployment, the Admin user must be enabled. Find this resource and go to Access Keys to enable the Admin user, as shown below:

Azure Container Registry - Enable Admin User
Azure Container Registry - Enable Admin User

Read more information about the Admin Account in Microsoft Docs

Steps to setup Azure DevOps

We will return in to Azure after finishing and pushing one image successfully. The reason is, we first need to create the repository and image in our Azure Container Registry and then select it from the App Service for Continuous Deployment. Visit dev.azure.com, create a new project (or select an existing one) and follow the next steps to create the pipeline:

Step 1

First step, creating a pipeline! Click on the blue rocket on the left with the name Pipelines and when you see a screen like the one that follows, click Create Pipeline:

Azure DevOps - Configure Pipeline Create
Azure DevOps - Configure Pipeline Create

(it this is not the first pipeline, you should see a blue “New pipeline” button on the top right of your screen)

If it is a newly created project, then you need to enable Pipelines from the Project Settings (you might need to scroll down a bit)

Step 2

For this guide I uploaded the code to Azure Repos Git but there is no limitation, besides of course Azure DevOps being able to access your favorite version control service. In this step, choose your service and Azure DevOps will immediately try to retrieve all the repos of that service. Select the one and you will go to the next step. The available version control services are shown below:

Azure DevOps - Configure Pipeline Choose Repo
Azure DevOps - Configure Pipeline Choose Repo

Step 3

Azure Pipelines offer numerous templates to choose from for building, testing and deploying your app. For this current guide we will need the “Docker – Build and Push an image to Azure Container Registry” template. Click on it, but before we go the final “Review” tab we will need some intermediate configuration to do. The correct template is shown in the image below:

Azure DevOps - Configure Pipeline Docker
Azure DevOps - Configure Pipeline Docker

Step 4

Fourth and fifth steps could easily be one, since in this one you will just need to select the desired subscription. Hopefully you use the same account in portal.azure.com and dev.azure.com so after a sort loading you should be able see a list of all available subscriptions. Select the one you want and click “Continue“. In the example below, only the “Free Trial” is available:

Azure DevOps Configure Pipeline Select Subscription
Azure DevOps Configure Pipeline Select Subscription

Step 5

After clicking “Continue”, you will see a few more fields appearing; mind only about the “Container Registry” dropdown menu. Find and select the one just created in Azure (in this guide RegistryAspNetCoreDockerDemo) and click the blue button “Validate and Configure“. In the image below you can see a sample of how that page might look like. The blue button mention is not visible in this screenshot:

Azure DevOps - Configure Pipeline Select Container Registry
Azure DevOps - Configure Pipeline Select Container Registry

You might be asked to sign in to the Microsoft Account you use in Azure to retrieve the available container registries.

Step 6

Easiest step of all since you are done and the moment of truth is here! If you want, you can review your pipeline YAML file, and click “Save and Run“. Hold on tight for a few minutes, success is very close and it looks like this:

Azure DevOps - Configure Pipeline Success
Azure DevOps - Configure Pipeline Select Container Registry

Steps to setup Azure App Service

Now that we are done setting up an Azure Pipeline, go back to portal.azure.com and follow the next steps to setup the last part, an Azure App Service.

Step 1

As before, use the convenient search bar on top to find what you want; this time search for “Web App” and click on the result you want see on the Marketplace group. The image below shows exactly the steps:

Azure App Service - Search
Azure App Service - Search

Step 2

The “Create Web App” form will open with a few selections to be made. The minimum changes required are to select your Subscription and Resource group, and of course choose Docker Container as Publish. The “Name” will be part of your azurewebsites.net url, you will need it after the next step! For example, in this guide the url that the app will go live will be AspNetCoreDockerDemo.azurewebsites.net (pascal case is just for easy reading of course). If needed, select the appropriate Service Plan and click “Review + Create“. The image that follows has an oval shape over the most important choices:

Azure App Service - Create
Azure App Service - Create

Step 3

And we are finally done! There is only one last step, this one, to configure Continuous Deployment. Go to the resource you just created, and navigate to “Container Settings” on the left. Choose “Azure Container Registry” as the image source, choose the registry we created before and then the image. Don’t forget of course to set “Continuous Deployment” to “On” and hit “Save“. The image that follows highlights those selections:

Azure App Service - Container Settings
Azure App Service - Container Settings

Conclusion

Although it’s a process with many steps and potential pitfalls, if you do it once, you will realize that is more about configuring and less than anything creative! You just click and type a few things and you are done!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

by George Kosmidis / Published 4 years and 3 months ago
Publish a containerized .NET Core app using Docker, Azure DevOps, Azure Container Registry and Azure App Service

This is a guide on how to use Azure DevOps to build and then publish a docker image as an Azure App Service, using Azure Container Registry.

Prerequisites

This guide assumes basic knowledge in Docker and more specifically how to create a Dockerfile. This docker cheat sheet provides a ready Dockerfile with explanations, plus an easy way to create your own Dockerfile from within Visual Studio. The guide also requires an account on Azure and Azure DevOps. The code is hosted in Azure DevOps, but almost any -accessible from Azure DevOps- version control system will do.

In the process that follows, we setup three things mainly; An Azure Container Registry to hold the Docker Image, an Azure DevOps Pipeline to build and push the image to the registry, and and Azure App Service that will continuously pull the image from the registry.

Steps to setup Azure Container Registry

In order to setup an Azure Container Registry, you will of course need to visit portal.azure.com first. After signing in, follow the next three steps to setup and configure Azure Container Registry correctly:

Step 1

Use the convenient search bar on top to search for “Container Registry“. Once the results are in, click on the left side on the “Container Registry” result, as shown here:

Azure Container Registry - Search
Azure Container Registry - Search

Step 2

Once you clicked on the correct result, the “Create Container Registry” form will appear and a few selections have to be made. The minimum changes required here, are to select the Subscription and Resource group you wish (you can also create a new recourse), and to write the Registry name you prefer. Change the Location and SKU if needed and click Create once done.

Azure Container Registry - Create
Azure Container Registry - Create

The Registry name is part of the Login Server for your Azure Container Registry. In this example it will be registryaspnetcoredockerdemo.azurecr.io.

Step 3

Enable the Admin user for this Container Registry. Although the admin account is designed for a single user to access the registry, mainly for testing purposes, in order to be able to use the current registry from an App Service and select image source and Continuous Deployment, the Admin user must be enabled. Find this resource and go to Access Keys to enable the Admin user, as shown below:

Azure Container Registry - Enable Admin User
Azure Container Registry - Enable Admin User

Read more information about the Admin Account in Microsoft Docs

Steps to setup Azure DevOps

We will return in to Azure after finishing and pushing one image successfully. The reason is, we first need to create the repository and image in our Azure Container Registry and then select it from the App Service for Continuous Deployment. Visit dev.azure.com, create a new project (or select an existing one) and follow the next steps to create the pipeline:

Step 1

First step, creating a pipeline! Click on the blue rocket on the left with the name Pipelines and when you see a screen like the one that follows, click Create Pipeline:

Azure DevOps - Configure Pipeline Create
Azure DevOps - Configure Pipeline Create

(it this is not the first pipeline, you should see a blue “New pipeline” button on the top right of your screen)

If it is a newly created project, then you need to enable Pipelines from the Project Settings (you might need to scroll down a bit)

Step 2

For this guide I uploaded the code to Azure Repos Git but there is no limitation, besides of course Azure DevOps being able to access your favorite version control service. In this step, choose your service and Azure DevOps will immediately try to retrieve all the repos of that service. Select the one and you will go to the next step. The available version control services are shown below:

Azure DevOps - Configure Pipeline Choose Repo
Azure DevOps - Configure Pipeline Choose Repo

Step 3

Azure Pipelines offer numerous templates to choose from for building, testing and deploying your app. For this current guide we will need the “Docker – Build and Push an image to Azure Container Registry” template. Click on it, but before we go the final “Review” tab we will need some intermediate configuration to do. The correct template is shown in the image below:

Azure DevOps - Configure Pipeline Docker
Azure DevOps - Configure Pipeline Docker

Step 4

Fourth and fifth steps could easily be one, since in this one you will just need to select the desired subscription. Hopefully you use the same account in portal.azure.com and dev.azure.com so after a sort loading you should be able see a list of all available subscriptions. Select the one you want and click “Continue“. In the example below, only the “Free Trial” is available:

Azure DevOps Configure Pipeline Select Subscription
Azure DevOps Configure Pipeline Select Subscription

Step 5

After clicking “Continue”, you will see a few more fields appearing; mind only about the “Container Registry” dropdown menu. Find and select the one just created in Azure (in this guide RegistryAspNetCoreDockerDemo) and click the blue button “Validate and Configure“. In the image below you can see a sample of how that page might look like. The blue button mention is not visible in this screenshot:

Azure DevOps - Configure Pipeline Select Container Registry
Azure DevOps - Configure Pipeline Select Container Registry

You might be asked to sign in to the Microsoft Account you use in Azure to retrieve the available container registries.

Step 6

Easiest step of all since you are done and the moment of truth is here! If you want, you can review your pipeline YAML file, and click “Save and Run“. Hold on tight for a few minutes, success is very close and it looks like this:

Azure DevOps - Configure Pipeline Success
Azure DevOps - Configure Pipeline Select Container Registry

Steps to setup Azure App Service

Now that we are done setting up an Azure Pipeline, go back to portal.azure.com and follow the next steps to setup the last part, an Azure App Service.

Step 1

As before, use the convenient search bar on top to find what you want; this time search for “Web App” and click on the result you want see on the Marketplace group. The image below shows exactly the steps:

Azure App Service - Search
Azure App Service - Search

Step 2

The “Create Web App” form will open with a few selections to be made. The minimum changes required are to select your Subscription and Resource group, and of course choose Docker Container as Publish. The “Name” will be part of your azurewebsites.net url, you will need it after the next step! For example, in this guide the url that the app will go live will be AspNetCoreDockerDemo.azurewebsites.net (pascal case is just for easy reading of course). If needed, select the appropriate Service Plan and click “Review + Create“. The image that follows has an oval shape over the most important choices:

Azure App Service - Create
Azure App Service - Create

Step 3

And we are finally done! There is only one last step, this one, to configure Continuous Deployment. Go to the resource you just created, and navigate to “Container Settings” on the left. Choose “Azure Container Registry” as the image source, choose the registry we created before and then the image. Don’t forget of course to set “Continuous Deployment” to “On” and hit “Save“. The image that follows highlights those selections:

Azure App Service - Container Settings
Azure App Service - Container Settings

Conclusion

Although it’s a process with many steps and potential pitfalls, if you do it once, you will realize that is more about configuring and less than anything creative! You just click and type a few things and you are done!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/publishing-asp-net-core-an-error-occurred-while-starting-the-application.html b/_output/publishing-asp-net-core-an-error-occurred-while-starting-the-application.html index 243e69da2..fc5f643a9 100644 --- a/_output/publishing-asp-net-core-an-error-occurred-while-starting-the-application.html +++ b/_output/publishing-asp-net-core-an-error-occurred-while-starting-the-application.html @@ -1,8 +1,8 @@ Publishing ASP.NET Core: An error occurred while starting the application

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Publishing ASP.NET Core: An error occurred while starting the application

by George Kosmidis / Published 6 years and 3 months ago, modified 4 years and 2 months ago
Publishing ASP.NET Core: An error occurred while starting the application

Have you seen this error?
An error occurred while starting the application. .NET Core <version> | Microsoft.AspNetCore.Hosting <version> | Microsoft Windows <version> | Need help?


There is a newer version of this blog post!
Visit /an-error-occurred-while-starting-the-application-process-failure-and-many-more/

It looks like this in your browser:

An error occurred while starting the application.
An error occurred while starting the application.

Besides that one hint, that the error is while starting, it’s not very descriptive, right?

Althouth there many things that could go wrong and the proper way is to actually troubleshoot the error, I end up googling about this for over an hour! In my search I found numerous articles but it turned out that for me the solution was simple!

I forgot to configure the release output path for swagger :/

Probably you already know how to do this, but in case you don’t remember…:
Right click your project, then click Properties, then click theBuild tab and at the Output section check the XML documentation file:

An error occurred while starting the application - Configuration
An error occurred while starting the application - Configuration

And if configuring swagger wasn’t the solution, you can either check one of the links below, or just troubleshoot your app.

There is a newer version of this blog post!
Visit /an-error-occurred-while-starting-the-application-process-failure-and-many-more/
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +.NET Core <version> | Microsoft.AspNetCore.Hosting <version> | Microsoft Windows <version> | Need help?">

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Publishing ASP.NET Core: An error occurred while starting the application

by George Kosmidis / Published 6 years and 3 months ago, modified 4 years and 2 months ago
Publishing ASP.NET Core: An error occurred while starting the application

Have you seen this error?
An error occurred while starting the application. .NET Core <version> | Microsoft.AspNetCore.Hosting <version> | Microsoft Windows <version> | Need help?


There is a newer version of this blog post!
Visit /an-error-occurred-while-starting-the-application-process-failure-and-many-more/

It looks like this in your browser:

An error occurred while starting the application.
An error occurred while starting the application.

Besides that one hint, that the error is while starting, it’s not very descriptive, right?

Althouth there many things that could go wrong and the proper way is to actually troubleshoot the error, I end up googling about this for over an hour! In my search I found numerous articles but it turned out that for me the solution was simple!

I forgot to configure the release output path for swagger :/

Probably you already know how to do this, but in case you don’t remember…:
Right click your project, then click Properties, then click theBuild tab and at the Output section check the XML documentation file:

An error occurred while starting the application - Configuration
An error occurred while starting the application - Configuration

And if configuring swagger wasn’t the solution, you can either check one of the links below, or just troubleshoot your app.

There is a newer version of this blog post!
Visit /an-error-occurred-while-starting-the-application-process-failure-and-many-more/
This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/quantum-computing-basics-with-q-the-superposition-of-a-qubit.html b/_output/quantum-computing-basics-with-q-the-superposition-of-a-qubit.html index d5c8b11f8..5e5b091a0 100644 --- a/_output/quantum-computing-basics-with-q-the-superposition-of-a-qubit.html +++ b/_output/quantum-computing-basics-with-q-the-superposition-of-a-qubit.html @@ -1,5 +1,5 @@ -Quantum Computing basics with Q# – The superposition of a qubit

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Quantum Computing basics with Q# – The superposition of a qubit

by George Kosmidis / Published 4 years and 4 months ago, modified 4 years and 3 months ago
Quantum Computing basics with Q# – The superposition of a qubit

There are some problems so difficult, so incredibly vast, that even if every supercomputer in the world worked on the problem, it would still take longer than the lifetime of the universe to solve!

The phrase above, found in Microsoft Docs, captures today’s problems with our regular computers and as a result the limitations we face in our every day lives. Numerous problems in environment, health, agriculture and many other fields have a solution lost in a vast ocean of possible answers that need to be tested one by one for correctness.

Enters Quantum Computing!

What is Quantum Computing

Quantum computing is the use of quantum-mechanical phenomena such as superposition and entanglement to perform computations. These quantum-mechanical phenomena are described by quantum physics as the behavior of atoms and fundamental particles, like electrons and photons. A quantum computer operates by controlling the behavior of these particles, but in a way that is completely different from regular computers. Quantum computers are vastly more capable of solving problems like integer factorization (which underlies RSA encryption), but since they are notoriously difficult to build and program they are crippled by errors in such a degree, that their operation falls apart before any nontrivial program has a chance to complete.

What is Quantum Superposition

Imagine two colliding waves in the sea; sometimes they perfectly add to make a bigger wave, sometimes they completely cancel each other out, but often it’s just a combination of both somewhere in between. This constructive or destructive interference of waves is known as superposition in classical physics.

In Quantum mechanics though, superposition can be a bit weirder!

A cat, with a Geiger counter, and a bit of poison in a sealed box. Quantum mechanics says that after a while, the cat is both alive and dead. A person looking into the box will either find the cat alive or dead, however it is assumed to be both alive and dead before you look into the box.
A cat, with a Geiger counter, and a bit of poison in a sealed box. Quantum mechanics says that after a while, the cat is both alive and dead. A person looking into the box will either find the cat alive or dead, however it is assumed to be both alive and dead before you look into the box.

Particles that exist in different states (for example in different positions or moving at different speeds, etc) are thought of as existing across all the possible states at the same time! Yes, a particle in superposition can exist in two places at the same time and/or move at different speeds simultaneously. This “unnatural” state of matter, practically impossible for a human brain to comprehend, it’s one of the weirdest realities of quantum physics.

The famous thought experiment, Schrödinger’s cat, was an attempt to illustrate the problems of Copenhagen interpretation of quantum mechanics by applying quantum mechanics to everyday objects. Copenhagen interpretation, devised somewhere around 1926, was stating that physical systems, in general, do not have a state until measured.

However, this weird behavior becomes human-friendly once a measurement of a particle is made; when for example we check its position, no matter how we checked it, the superposition is lost and the particle exists in one known state.

What is Quantum entanglement

Quantum entanglement that Einstein described as “spooky action over distance”, is a relationship between fundamental particle properties that persist over distance without requiring transmission of information.

JAMES O'BRIEN FOR QUANTA MAGAZINE
JAMES O'BRIEN FOR QUANTA MAGAZINE

Imagine for example, that we put each member of a pair of gloves in boxes (somehow without seeing them) and mail one of them to the opposite side of the earth. Whoever is the recipient should be able, by looking inside her/his box, to determine the properties of the glove that we still have with us in our box. If she/he states “it’s blue” and we open our box our glove will be blue. Simple and not that spooky at all, right? But what about, if the recipient throws the box in green paint affecting the glove’s color. Will that make my glove change color too? In the particle world, yes. My glove will instantly be green…!

In other words, measurements of physical properties such as position, momentum, spin, and polarization performed on entangled particles are found to be perfectly correlated, even when the particles are separated by a large distance. Measurements on one particle, affect the entangled system as a whole.

Quantum programming with Q#

Quantum programming is the process of assembling sequences of instructions, called quantum programs, that are capable of running on a quantum computer. Quantum programming languages help express quantum algorithms using high-level constructs. High-end programming languages, like Q#, use Quantum software development kits, that provide the means to simulate a quantum environment.

Hello Quantum World!

Q# is built to play well with .NET languages such as C# and F#; we just need to install the Quantum Development Kit! In order to do so we need to download and install this Visual Studio Extension: https://marketplace.visualstudio.com/items?itemName=quantum.DevKit.

When the installation is completed, we can start Visual Studio (it has to be v16.3+) and perform the following steps to create a new Q# application:

  • Start Visual Studio (v16.3+)
  • Click on “Create a new project”
  • Type “Q#” in the search box
  • Select Q# Application
  • Select Next
  • Choose a name and location for your application
  • Make sure that “place project and solution in same directory” is unchecked
  • Select Create

And that’s it! We can now run our app and get the familiar greetings:

Hello quantum world!
Hello quantum world!

Randomly select an atom in the Universe

That is, if all atoms in the universe had an index! What we really going to create is a random number generator with an upper limit bigger than the number of the atoms in the universe. This, not so impressive feat, will perfectly demonstrate the very basics of working with Qubits. This is just a blog post after all, not the full documentation!

The Int in Q# is a 64-bit signed integer, where BigInt is a signed integer of arbitrary size and it’s based on BigInteger. Read more about the The Type Model.

The most interesting type in Q#, the Qubit, upgrades the bit we know to mythical proportions! Where classical bits hold a single binary value such as 0 or 1, the state of a qubit can be in a superposition of 0 and 1! Conceptually, a qubit can be thought of as a direction in space (also known as a vector), where a qubit can be in any of the possible directions. The two classical states are the two directions on one axes (e.g. x’x); representing 100% chance of measuring 0 and 100% chance of measuring 1. This representation is also more formally visualized by the bloch sphere.

As a first step, let’s try to allocate a qubit, set it to superposition and then measure the result. This will give us, after the measurement, either 100% of the times 1 or 100% of the times 0; while in superposition though it has exactly 50% chances of being either 0 or 1:

operation GetRandomResult() : Result {
+Quantum Computing basics with Q# – The superposition of a qubit

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Quantum Computing basics with Q# – The superposition of a qubit

by George Kosmidis / Published 4 years and 4 months ago, modified 4 years and 3 months ago
Quantum Computing basics with Q# – The superposition of a qubit

There are some problems so difficult, so incredibly vast, that even if every supercomputer in the world worked on the problem, it would still take longer than the lifetime of the universe to solve!

The phrase above, found in Microsoft Docs, captures today’s problems with our regular computers and as a result the limitations we face in our every day lives. Numerous problems in environment, health, agriculture and many other fields have a solution lost in a vast ocean of possible answers that need to be tested one by one for correctness.

Enters Quantum Computing!

What is Quantum Computing

Quantum computing is the use of quantum-mechanical phenomena such as superposition and entanglement to perform computations. These quantum-mechanical phenomena are described by quantum physics as the behavior of atoms and fundamental particles, like electrons and photons. A quantum computer operates by controlling the behavior of these particles, but in a way that is completely different from regular computers. Quantum computers are vastly more capable of solving problems like integer factorization (which underlies RSA encryption), but since they are notoriously difficult to build and program they are crippled by errors in such a degree, that their operation falls apart before any nontrivial program has a chance to complete.

What is Quantum Superposition

Imagine two colliding waves in the sea; sometimes they perfectly add to make a bigger wave, sometimes they completely cancel each other out, but often it’s just a combination of both somewhere in between. This constructive or destructive interference of waves is known as superposition in classical physics.

In Quantum mechanics though, superposition can be a bit weirder!

A cat, with a Geiger counter, and a bit of poison in a sealed box. Quantum mechanics says that after a while, the cat is both alive and dead. A person looking into the box will either find the cat alive or dead, however it is assumed to be both alive and dead before you look into the box.
A cat, with a Geiger counter, and a bit of poison in a sealed box. Quantum mechanics says that after a while, the cat is both alive and dead. A person looking into the box will either find the cat alive or dead, however it is assumed to be both alive and dead before you look into the box.

Particles that exist in different states (for example in different positions or moving at different speeds, etc) are thought of as existing across all the possible states at the same time! Yes, a particle in superposition can exist in two places at the same time and/or move at different speeds simultaneously. This “unnatural” state of matter, practically impossible for a human brain to comprehend, it’s one of the weirdest realities of quantum physics.

The famous thought experiment, Schrödinger’s cat, was an attempt to illustrate the problems of Copenhagen interpretation of quantum mechanics by applying quantum mechanics to everyday objects. Copenhagen interpretation, devised somewhere around 1926, was stating that physical systems, in general, do not have a state until measured.

However, this weird behavior becomes human-friendly once a measurement of a particle is made; when for example we check its position, no matter how we checked it, the superposition is lost and the particle exists in one known state.

What is Quantum entanglement

Quantum entanglement that Einstein described as “spooky action over distance”, is a relationship between fundamental particle properties that persist over distance without requiring transmission of information.

JAMES O'BRIEN FOR QUANTA MAGAZINE
JAMES O'BRIEN FOR QUANTA MAGAZINE

Imagine for example, that we put each member of a pair of gloves in boxes (somehow without seeing them) and mail one of them to the opposite side of the earth. Whoever is the recipient should be able, by looking inside her/his box, to determine the properties of the glove that we still have with us in our box. If she/he states “it’s blue” and we open our box our glove will be blue. Simple and not that spooky at all, right? But what about, if the recipient throws the box in green paint affecting the glove’s color. Will that make my glove change color too? In the particle world, yes. My glove will instantly be green…!

In other words, measurements of physical properties such as position, momentum, spin, and polarization performed on entangled particles are found to be perfectly correlated, even when the particles are separated by a large distance. Measurements on one particle, affect the entangled system as a whole.

Quantum programming with Q#

Quantum programming is the process of assembling sequences of instructions, called quantum programs, that are capable of running on a quantum computer. Quantum programming languages help express quantum algorithms using high-level constructs. High-end programming languages, like Q#, use Quantum software development kits, that provide the means to simulate a quantum environment.

Hello Quantum World!

Q# is built to play well with .NET languages such as C# and F#; we just need to install the Quantum Development Kit! In order to do so we need to download and install this Visual Studio Extension: https://marketplace.visualstudio.com/items?itemName=quantum.DevKit.

When the installation is completed, we can start Visual Studio (it has to be v16.3+) and perform the following steps to create a new Q# application:

  • Start Visual Studio (v16.3+)
  • Click on “Create a new project”
  • Type “Q#” in the search box
  • Select Q# Application
  • Select Next
  • Choose a name and location for your application
  • Make sure that “place project and solution in same directory” is unchecked
  • Select Create

And that’s it! We can now run our app and get the familiar greetings:

Hello quantum world!
Hello quantum world!

Randomly select an atom in the Universe

That is, if all atoms in the universe had an index! What we really going to create is a random number generator with an upper limit bigger than the number of the atoms in the universe. This, not so impressive feat, will perfectly demonstrate the very basics of working with Qubits. This is just a blog post after all, not the full documentation!

The Int in Q# is a 64-bit signed integer, where BigInt is a signed integer of arbitrary size and it’s based on BigInteger. Read more about the The Type Model.

The most interesting type in Q#, the Qubit, upgrades the bit we know to mythical proportions! Where classical bits hold a single binary value such as 0 or 1, the state of a qubit can be in a superposition of 0 and 1! Conceptually, a qubit can be thought of as a direction in space (also known as a vector), where a qubit can be in any of the possible directions. The two classical states are the two directions on one axes (e.g. x’x); representing 100% chance of measuring 0 and 100% chance of measuring 1. This representation is also more formally visualized by the bloch sphere.

As a first step, let’s try to allocate a qubit, set it to superposition and then measure the result. This will give us, after the measurement, either 100% of the times 1 or 100% of the times 0; while in superposition though it has exactly 50% chances of being either 0 or 1:

operation GetRandomResult() : Result {
     using (q = Qubit())  {                // Allocate a qubit.
         H(q);                             // Hadamard operation; put the qubit to superposition. It now has a 50% chance of being 0 or 1.
         return MResetZ(q);                // Measure the qubit value in the Z basis, and reset it to the standard basis state |0〉 after;
@@ -53,4 +53,4 @@
         }
     }
 }
-

Happy coding!

Q# works very well with C#, so it is easy to create a Q# Library and use that library from C# (or F#). An example of this interoperability is the Quantum.RandomNumber solution in my GitHub account!.

Further reading

There are many resources already available that can help you start your journey in the Quantum World. Quantum Katas is a good start to learn by doing, so is the Quantum Teleportation Sample for example can help you understand the quantum entanglement, a way of moving a quantum state from one location to another without having to move physical particle(s) along with it. The entry point for all possible resources is the Microsoft Quantum Documentation.

Conclusion

Physicists have been talking about the power of quantum computing for over 30 years, but the question have always been: will it ever do something useful? Google answered that question just a few months ago, in late 2019, with the Quantum Supremacy experiment that successfully performed a computation in 200 seconds that would otherwise need 10000 years in the faster supercomputer available today! Quantum computing will massively change our lives in so many fields the next years, that it is easily comparable with the invention of the first transistor that led to the 3rd Industrial Revolution, the Digital Revolution. When the first computers appeared, nobody believed that there is going to be a smart phone that will hold more computational power than all the computers of the era combined and we could have that power in our pockets…!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Happy coding!

Q# works very well with C#, so it is easy to create a Q# Library and use that library from C# (or F#). An example of this interoperability is the Quantum.RandomNumber solution in my GitHub account!.

Further reading

There are many resources already available that can help you start your journey in the Quantum World. Quantum Katas is a good start to learn by doing, so is the Quantum Teleportation Sample for example can help you understand the quantum entanglement, a way of moving a quantum state from one location to another without having to move physical particle(s) along with it. The entry point for all possible resources is the Microsoft Quantum Documentation.

Conclusion

Physicists have been talking about the power of quantum computing for over 30 years, but the question have always been: will it ever do something useful? Google answered that question just a few months ago, in late 2019, with the Quantum Supremacy experiment that successfully performed a computation in 200 seconds that would otherwise need 10000 years in the faster supercomputer available today! Quantum computing will massively change our lives in so many fields the next years, that it is easily comparable with the invention of the first transistor that led to the 3rd Industrial Revolution, the Digital Revolution. When the first computers appeared, nobody believed that there is going to be a smart phone that will hold more computational power than all the computers of the era combined and we could have that power in our pockets…!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/scale-set-vs-availability-set.html b/_output/scale-set-vs-availability-set.html index d1758dfdc..e60859d0f 100644 --- a/_output/scale-set-vs-availability-set.html +++ b/_output/scale-set-vs-availability-set.html @@ -1,5 +1,5 @@ -Azure Scale Set vs Azure Availability Set

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Azure Scale Set vs Azure Availability Set

by George Kosmidis / Published 2 years ago
Azure Scale Set vs Azure Availability Set

In this blog post, we will be comparing two important features in Azure: Scale Sets and Availability Sets. Both of these features are designed to help you manage and scale your applications, but they work in different ways and are suitable for different use cases. Understanding the differences between these two features is important if you are planning to use Azure to host your applications.

Scale Sets

An Azure Scale Set is a group of identical virtual machines (VMs) in Microsoft Azure that can be configured to automatically increase or decrease the number of VMs in the set based on demand. Scale sets provide a way to deploy and manage a large number of VMs in a consistent, predictable manner. They are designed to support workloads that are scalable and require a high level of availability.

Scale sets are particularly useful for running stateless applications, such as web servers, that can be easily scaled up or down based on the needs of the workload. They can also be used to run stateful applications, such as databases, by using managed disks to persist data across multiple VMs.

In addition to automatically scaling the number of VMs in the set, Azure Scale Sets also provide features such as automatic health monitoring, load balancing, and rolling upgrades, which make it easier to deploy and manage large-scale applications in Azure.

One of the key capabilities of Scale Sets is autoscaling, which allows you to automatically increase or decrease the number of VMs based on demand.
Here is an example of how you could use Bicep to deploy an Azure Scale Set:

+Azure Scale Set vs Azure Availability Set

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Azure Scale Set vs Azure Availability Set

by George Kosmidis / Published 2 years ago
Azure Scale Set vs Azure Availability Set

In this blog post, we will be comparing two important features in Azure: Scale Sets and Availability Sets. Both of these features are designed to help you manage and scale your applications, but they work in different ways and are suitable for different use cases. Understanding the differences between these two features is important if you are planning to use Azure to host your applications.

Scale Sets

An Azure Scale Set is a group of identical virtual machines (VMs) in Microsoft Azure that can be configured to automatically increase or decrease the number of VMs in the set based on demand. Scale sets provide a way to deploy and manage a large number of VMs in a consistent, predictable manner. They are designed to support workloads that are scalable and require a high level of availability.

Scale sets are particularly useful for running stateless applications, such as web servers, that can be easily scaled up or down based on the needs of the workload. They can also be used to run stateful applications, such as databases, by using managed disks to persist data across multiple VMs.

In addition to automatically scaling the number of VMs in the set, Azure Scale Sets also provide features such as automatic health monitoring, load balancing, and rolling upgrades, which make it easier to deploy and manage large-scale applications in Azure.

One of the key capabilities of Scale Sets is autoscaling, which allows you to automatically increase or decrease the number of VMs based on demand.
Here is an example of how you could use Bicep to deploy an Azure Scale Set:

   // Define the Scale Set resource
   resource scaleSet 'Microsoft.Compute/virtualMachineScaleSets@2019-03-01' = {
     name: 'myScaleSet'
@@ -143,4 +143,4 @@
 
     ...other properties
   }
-

Use Cases

In terms of use cases, Scale Sets are best suited for applications that can scale out horizontally, such as web servers and batch processing systems. They are not designed to ensure the availability of an application in the event of a hardware failure or maintenance event. On the other hand, Availability Sets are designed specifically to ensure the availability of an application by placing VMs in different fault and update domains. They are not designed for horizontal scaling like Scale Sets.

Fault domains refer to the physical infrastructure within a data center, such as racks and power supplies. By placing VMs in different fault domains, you can ensure that your application remains available even if there is a hardware failure or maintenance event that affects one of the fault domains. For example, if you have an Availability Set with 3 fault domains and you deploy 2 VMs in each fault domain, then at least 2 VMs will be available even if one fault domain goes offline.
Update domains refer to the groups of VMs that can be taken down for maintenance at the same time. By placing VMs in different update domains, you can ensure that your application remains available even if there is a planned maintenance event that affects one of the update domains. For example, if you have an Availability Set with 3 update domains and you deploy 2 VMs in each update domain, then at least 2 VMs will be available even if one update domain goes offline for maintenance.

Conclusion

In summary, Azure Scale Sets and Availability Sets are both useful features that can help you manage and scale your applications in the Azure cloud. However, they work in different ways and are suitable for different use cases. Scale Sets are best suited for applications that can scale out horizontally, while Availability Sets are best suited for ensuring the availability of an application. It is important to understand the capabilities, use cases, and limitations of these two features in order to decide which one is best suited for your needs.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Use Cases

In terms of use cases, Scale Sets are best suited for applications that can scale out horizontally, such as web servers and batch processing systems. They are not designed to ensure the availability of an application in the event of a hardware failure or maintenance event. On the other hand, Availability Sets are designed specifically to ensure the availability of an application by placing VMs in different fault and update domains. They are not designed for horizontal scaling like Scale Sets.

Fault domains refer to the physical infrastructure within a data center, such as racks and power supplies. By placing VMs in different fault domains, you can ensure that your application remains available even if there is a hardware failure or maintenance event that affects one of the fault domains. For example, if you have an Availability Set with 3 fault domains and you deploy 2 VMs in each fault domain, then at least 2 VMs will be available even if one fault domain goes offline.
Update domains refer to the groups of VMs that can be taken down for maintenance at the same time. By placing VMs in different update domains, you can ensure that your application remains available even if there is a planned maintenance event that affects one of the update domains. For example, if you have an Availability Set with 3 update domains and you deploy 2 VMs in each update domain, then at least 2 VMs will be available even if one update domain goes offline for maintenance.

Conclusion

In summary, Azure Scale Sets and Availability Sets are both useful features that can help you manage and scale your applications in the Azure cloud. However, they work in different ways and are suitable for different use cases. Scale Sets are best suited for applications that can scale out horizontally, while Availability Sets are best suited for ensuring the availability of an application. It is important to understand the capabilities, use cases, and limitations of these two features in order to decide which one is best suited for your needs.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/secrets-management-for-asp-net-core-and-azure-devops.html b/_output/secrets-management-for-asp-net-core-and-azure-devops.html index 326b8652f..26f9ec345 100644 --- a/_output/secrets-management-for-asp-net-core-and-azure-devops.html +++ b/_output/secrets-management-for-asp-net-core-and-azure-devops.html @@ -1,5 +1,5 @@ -Secrets management for ASP.NET Core and Azure DevOps

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Secrets management for ASP.NET Core and Azure DevOps

by George Kosmidis / Published 3 years ago
Secrets management for ASP.NET Core and Azure DevOps

In this post we will discover how to handle appsettings.json secrets (like API keys, passwords etc.) in a .NET app and eventually how to deploy a protected app and let Azure DevOps handle the secret replacement.

Introduction

Some time ago I wrote a post on how to create a new component in Blazor and then publish it as a Nuget package. During the post I described how to access and process OpenWeather data, an action that needs an API key to be included in every request towards their API. For that guide, the API key was included in the appsettings.json; it was just a temporary key which I then deleted. In a real life application though, you will find yourself in need of a production key that will be used only -where else- in production, and must not be part of your repo for obvious security reasons.

The source of the described Blazor component is public in Github, so handling appsettings.json secrets is even more important in a public repo. In any case, it is generally a bad practice to push keys even in private repositories.

ASP.NET Core Safe Storage for app secrets

Let’s start by taking a look in the appsettings.json file of the Blazor component we were talking about:

{
+Secrets management for ASP.NET Core and Azure DevOps

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Secrets management for ASP.NET Core and Azure DevOps

by George Kosmidis / Published 3 years ago
Secrets management for ASP.NET Core and Azure DevOps

In this post we will discover how to handle appsettings.json secrets (like API keys, passwords etc.) in a .NET app and eventually how to deploy a protected app and let Azure DevOps handle the secret replacement.

Introduction

Some time ago I wrote a post on how to create a new component in Blazor and then publish it as a Nuget package. During the post I described how to access and process OpenWeather data, an action that needs an API key to be included in every request towards their API. For that guide, the API key was included in the appsettings.json; it was just a temporary key which I then deleted. In a real life application though, you will find yourself in need of a production key that will be used only -where else- in production, and must not be part of your repo for obvious security reasons.

The source of the described Blazor component is public in Github, so handling appsettings.json secrets is even more important in a public repo. In any case, it is generally a bad practice to push keys even in private repositories.

ASP.NET Core Safe Storage for app secrets

Let’s start by taking a look in the appsettings.json file of the Blazor component we were talking about:

{
   //...
   "WeatherWidgetSettings": {
     "OpenWeatherApiKey": "XXXXXXXXXXXXXXXXXXXXXXXXXX"
@@ -7,4 +7,4 @@
   //...
 }

You’ll notice that line 4 contains a sensitive string, the secret (the OpenWeather API Key) used to retrieve data. If you check the history of that file in Github, you will notice that I during an earlier push I had in that very place the actual key! How crazy was that, right? My private key free for the entire world to use, an action that could potentially lead to some crazy overcharge!

So step 1, let’s delete the compromised key for a good night sleep; step 2, create a new key and don’t publish it; step 3, go to the root of your project (where your appsettings.json file lives), open your favorite shell and run dotnet user-secrets init. By running this piece of code your .csproj file will be enriched with the following lines:

<PropertyGroup>
   <UserSecretsId>0130c301-d82b-41ac-9620-dbbfea3d427d</UserSecretsId>
-</PropertyGroup>

Which simply signify that you are ready to add your first secret in the safe storage by running the following command:

dotnet user-secrets set "WeatherWidgetSettings:OpenWeatherApiKey" "YOUR_BRAND_NEW_SECRET_KEY"

It was that simple. We just flatten the structure of the appsettings.json entry and we separate each nesting level by a colon (:). Now all we have to do is to just keep the structure of the appsettings.json as it was (aka do nothing), and the value of that key will be replaced with the one living in the safe storage every time you run the app.

Use dotnet user-secrets list to get a list with all secrets stored and dotnet user-secrets remove "WeatherWidgetSettings:OpenWeatherApiKey" to remove a key from the safe storage. Also, read more about “Safe storage of app secrets in development in ASP.NET Core“.

Replacing secrets in Azure DevOps

So we are done with that and we can safely push our code to a public (or private) repo; the secrets are safe. But what about if we have (and we should) CI/CD set up, and we are expecting our pipeline to automatically deliver every new version without having to manually change files.

Enters the File Transform Task, which you need to add in your yml file. Assuming prior knowledge in Azure DevOps, I will skip the entire process and cut right to the chase: Once you find the task, choose JSON as the File Format and /**/appsettings.*.json as Target Files. This will instruct the task to recursively search your files for anything that matches the Target Files pattern and make adjustments to the contents of those files.

The section “Steps to setup Azure DevOps” in this blog post, describes in more details how to create and edit a pipeline.

Azure Pipelines, File Transform
Azure Pipelines, File Transform

Almost ready! Up until now we prepared our pipeline for the secret replacement, but we also need to add the key to be replaced. This is done in a similar way as with the dotnet user-secrets set of commands, with the difference that we use Variables instead. Since we are already in the Pipeline Edit form, find the Variables button in the upper right corner and add a new variable with the key in the format WeatherWidgetSettings.OpenWeatherApiKey (mind the . here instead of the :):

Azure DevOps - Pipelines
Azure DevOps - Pipelines

Run your pipeline and enjoy!

In case you want to see a complete working yml, you can check the one of the mentioned Blazor Component: ttps://github.com/georgekosmidis/Blazor.WeatherWidget/blob/main/azure-pipelines-release-samplepage.yml.

Conclusion

This approach was a free and simple solution that you can use to protect and secure your projects pretty fast. Next step, we should use this knowledge to deploy and use an Azure Key Vault, a specialized service from Azure, a far more advanced and centralized solution for secret management.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +</PropertyGroup>

Which simply signify that you are ready to add your first secret in the safe storage by running the following command:

dotnet user-secrets set "WeatherWidgetSettings:OpenWeatherApiKey" "YOUR_BRAND_NEW_SECRET_KEY"

It was that simple. We just flatten the structure of the appsettings.json entry and we separate each nesting level by a colon (:). Now all we have to do is to just keep the structure of the appsettings.json as it was (aka do nothing), and the value of that key will be replaced with the one living in the safe storage every time you run the app.

Use dotnet user-secrets list to get a list with all secrets stored and dotnet user-secrets remove "WeatherWidgetSettings:OpenWeatherApiKey" to remove a key from the safe storage. Also, read more about “Safe storage of app secrets in development in ASP.NET Core“.

Replacing secrets in Azure DevOps

So we are done with that and we can safely push our code to a public (or private) repo; the secrets are safe. But what about if we have (and we should) CI/CD set up, and we are expecting our pipeline to automatically deliver every new version without having to manually change files.

Enters the File Transform Task, which you need to add in your yml file. Assuming prior knowledge in Azure DevOps, I will skip the entire process and cut right to the chase: Once you find the task, choose JSON as the File Format and /**/appsettings.*.json as Target Files. This will instruct the task to recursively search your files for anything that matches the Target Files pattern and make adjustments to the contents of those files.

The section “Steps to setup Azure DevOps” in this blog post, describes in more details how to create and edit a pipeline.

Azure Pipelines, File Transform
Azure Pipelines, File Transform

Almost ready! Up until now we prepared our pipeline for the secret replacement, but we also need to add the key to be replaced. This is done in a similar way as with the dotnet user-secrets set of commands, with the difference that we use Variables instead. Since we are already in the Pipeline Edit form, find the Variables button in the upper right corner and add a new variable with the key in the format WeatherWidgetSettings.OpenWeatherApiKey (mind the . here instead of the :):

Azure DevOps - Pipelines
Azure DevOps - Pipelines

Run your pipeline and enjoy!

In case you want to see a complete working yml, you can check the one of the mentioned Blazor Component: ttps://github.com/georgekosmidis/Blazor.WeatherWidget/blob/main/azure-pipelines-release-samplepage.yml.

Conclusion

This approach was a free and simple solution that you can use to protect and secure your projects pretty fast. Next step, we should use this knowledge to deploy and use an Azure Key Vault, a specialized service from Azure, a far more advanced and centralized solution for secret management.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/simple-website-stress-tool-with-c-and-apache-http-server-benchmarking-tool.html b/_output/simple-website-stress-tool-with-c-and-apache-http-server-benchmarking-tool.html index 94c2c8a3c..2c2cc3a27 100644 --- a/_output/simple-website-stress-tool-with-c-and-apache-http-server-benchmarking-tool.html +++ b/_output/simple-website-stress-tool-with-c-and-apache-http-server-benchmarking-tool.html @@ -1,2 +1,2 @@ -Simple website stress tool with C# and Apache HTTP server benchmarking tool

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Simple website stress tool with C# and Apache HTTP server benchmarking tool

by George Kosmidis / Published 10 years ago, modified 3 years ago

To be honest, I got bored trying to remember all switches and combinations of Apache’s benchmarking tool! Since I use it sort of rarely, I just wrapped it in a convenient -for me at least- app that I can use without having to remember or read anything!

This is my simple implementation of a website stress tool that uses Apache HTTP server benchmarking tool to get results for any request. Just follow the link for my github account, download, build, and use

The complete working code (and app) can be found here: https://github.com/georgekosmidis/WebStressTool

Simple website stress tool

Uses Apache HTTP server benchmarking tool v2.3.1757674
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Read more about it here: http://httpd.apache.org/docs/current/programs/ab.html

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Simple website stress tool with C# and Apache HTTP server benchmarking tool

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Simple website stress tool with C# and Apache HTTP server benchmarking tool

by George Kosmidis / Published 10 years ago, modified 3 years ago

To be honest, I got bored trying to remember all switches and combinations of Apache’s benchmarking tool! Since I use it sort of rarely, I just wrapped it in a convenient -for me at least- app that I can use without having to remember or read anything!

This is my simple implementation of a website stress tool that uses Apache HTTP server benchmarking tool to get results for any request. Just follow the link for my github account, download, build, and use

The complete working code (and app) can be found here: https://github.com/georgekosmidis/WebStressTool

Simple website stress tool

Uses Apache HTTP server benchmarking tool v2.3.1757674
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Read more about it here: http://httpd.apache.org/docs/current/programs/ab.html

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/sitemap.xml b/_output/sitemap.xml index b1adaa2e8..4d72d77f0 100644 --- a/_output/sitemap.xml +++ b/_output/sitemap.xml @@ -136,10 +136,6 @@ https://blog.georgekosmidis.net/mocking-expected-behaviour-of-sql-functions-for-unit-testing-with-sqlite.html 2019-07-26T12:32:07+00:00 - - https://blog.georgekosmidis.net/azure-document-intelligence-sdk-preview-api.html - 2024-05-03T18:22:00+00:00 - https://blog.georgekosmidis.net/azure-function-app-dotnet-isolated.html 2022-08-12T14:32:01+00:00 @@ -266,42 +262,38 @@ https://blog.georgekosmidis.net/ - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-2.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-3.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-4.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-5.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-6.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-7.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-8.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 https://blog.georgekosmidis.net/index-page-9.html - 2024-09-08T16:22:28+00:00 - - - https://blog.georgekosmidis.net/index-page-10.html - 2024-09-08T16:22:28+00:00 + 2024-09-08T19:03:58+00:00 \ No newline at end of file diff --git a/_output/sql-server-how-to-simulate-drop-trigger-or-function-or-sp-if-exists.html b/_output/sql-server-how-to-simulate-drop-trigger-or-function-or-sp-if-exists.html index 37ce23727..f0c0bc4f1 100644 --- a/_output/sql-server-how-to-simulate-drop-trigger-or-function-or-sp-if-exists.html +++ b/_output/sql-server-how-to-simulate-drop-trigger-or-function-or-sp-if-exists.html @@ -1,5 +1,5 @@ -SQL Server: How to simulate DROP TRIGGER IF EXISTS

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: How to simulate DROP TRIGGER IF EXISTS

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

I usually store triggers, store procedures, functions, queries etc in sql files in an SVN repository. I then use a simple app I wrote, that just opens each file and executes it. The problem of course is CREATE and ALTER. I can’t use CREATE because the same trigger might already be there. On the other hand I couldn’t use ALTER because some triggers might be new.

Since there is no DROP TRIGGER IF EXISTS, I came up with this:

Of course, ‘YOUR_TRIGGER_NAME’ could be ‘YOUR_FUNCTION_NAME’ or whatever! Just match it with the ‘type’. These are all the possible values of column type:


+SQL Server: How to simulate DROP TRIGGER IF EXISTS

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: How to simulate DROP TRIGGER IF EXISTS

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

I usually store triggers, store procedures, functions, queries etc in sql files in an SVN repository. I then use a simple app I wrote, that just opens each file and executes it. The problem of course is CREATE and ALTER. I can’t use CREATE because the same trigger might already be there. On the other hand I couldn’t use ALTER because some triggers might be new.

Since there is no DROP TRIGGER IF EXISTS, I came up with this:

Of course, ‘YOUR_TRIGGER_NAME’ could be ‘YOUR_FUNCTION_NAME’ or whatever! Just match it with the ‘type’. These are all the possible values of column type:


 AF = Aggregate function (CLR)
 C  = CHECK constraint
 D  = Default or DEFAULT constraint
@@ -24,4 +24,4 @@
 U = User table
 V = View
 X = Extended stored procedure
-

You can read more about sys.sysobjects here: http://msdn.microsoft.com/en-us/library/ms177596.aspx?WT.mc_id=DT-MVP-5004591

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

You can read more about sys.sysobjects here: http://msdn.microsoft.com/en-us/library/ms177596.aspx?WT.mc_id=DT-MVP-5004591

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/sql-server-using-net-assemblies-clr.html b/_output/sql-server-using-net-assemblies-clr.html index 493bab439..74dc14452 100644 --- a/_output/sql-server-using-net-assemblies-clr.html +++ b/_output/sql-server-using-net-assemblies-clr.html @@ -1,5 +1,5 @@ -SQL Server: Using .NET assemblies (SQLCLR)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Using .NET assemblies (SQLCLR)

by George Kosmidis / Published 11 years and 5 months ago, modified 4 years and 1 month ago
SQL Server: Using .NET assemblies (SQLCLR)

SQLCLR is a technology for hosting of the .NET CLR engine inside SQL Server. Adding an assembly can be a lifesaver sometimes, since the limitations of coding in TSQL stored procedures, triggers or functions are a lot and profound.

As a quick guide, follow these steps:
1. Create a new class library using Studio

New Class Library Project
New Class Library Project.

2. Add the following code

using System;
+SQL Server: Using .NET assemblies (SQLCLR)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Using .NET assemblies (SQLCLR)

by George Kosmidis / Published 11 years and 5 months ago, modified 4 years and 1 month ago
SQL Server: Using .NET assemblies (SQLCLR)

SQLCLR is a technology for hosting of the .NET CLR engine inside SQL Server. Adding an assembly can be a lifesaver sometimes, since the limitations of coding in TSQL stored procedures, triggers or functions are a lot and profound.

As a quick guide, follow these steps:
1. Create a new class library using Studio

New Class Library Project
New Class Library Project.

2. Add the following code

using System;
 using System.Data;
 using Microsoft.SqlServer.Server;
 using System.Data.SqlTypes;
@@ -47,4 +47,4 @@
 DECLARE @msg varchar(MAX)
 EXEC sp_testCLR 'Just a string without a dot', @msg output
 PRINT @msg
-

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/sql-server-using-rank-to-display-percent-percentage-of-relevance.html b/_output/sql-server-using-rank-to-display-percent-percentage-of-relevance.html index eb0ec5498..e214d3914 100644 --- a/_output/sql-server-using-rank-to-display-percent-percentage-of-relevance.html +++ b/_output/sql-server-using-rank-to-display-percent-percentage-of-relevance.html @@ -1,5 +1,5 @@ -SQL Server: Using RANK to display PERCENT (percentage of relevance)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Using RANK to display PERCENT (percentage of relevance)

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

So you end up with a query l that returns what you searched for and with SQL Server Full Text Search engine, and with it the RANK column! How do you end up with a percentage of relevance for your users to enjoy?


Take a look at the following query for example:

SELECT *
+SQL Server: Using RANK to display PERCENT (percentage of relevance)

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Using RANK to display PERCENT (percentage of relevance)

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

So you end up with a query l that returns what you searched for and with SQL Server Full Text Search engine, and with it the RANK column! How do you end up with a percentage of relevance for your users to enjoy?


Take a look at the following query for example:

SELECT *
 FROM table AS FT_TBL INNER JOIN
    CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
    ON FT_TBL.unique_key_column = KEY_TBL.[KEY]
@@ -15,4 +15,4 @@
    CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
    ON FT_TBL.unique_key_column = KEY_TBL.[KEY]
 WHERE KEY_TBL.RANK > 0
-ORDER BY KEY_TBL.RANK DESC

* SQL SERVER 2012 now supports LOG ( float_expression [, base ] ). This means you do it this way: LOG(RANK, SUM(RANK) OVER( PARTITION BY 1))

Thanks Alex!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +ORDER BY KEY_TBL.RANK DESC

* SQL SERVER 2012 now supports LOG ( float_expression [, base ] ). This means you do it this way: LOG(RANK, SUM(RANK) OVER( PARTITION BY 1))

Thanks Alex!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/sql-server-weird-behavior-with-containstable-isabout-and-weighted-terms.html b/_output/sql-server-weird-behavior-with-containstable-isabout-and-weighted-terms.html index 54c02faa6..b6a861414 100644 --- a/_output/sql-server-weird-behavior-with-containstable-isabout-and-weighted-terms.html +++ b/_output/sql-server-weird-behavior-with-containstable-isabout-and-weighted-terms.html @@ -1,5 +1,5 @@ -SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

I came across the following weird behavior in an ISABOUT query in SQL SERVER, that involves the weight keyword and the final rank of the results. I want to describe this behavior here, just in case someone has a good explanation for it!

This posts assumes some basic knowledge of querying with full text search

The following bullets, are the sum up of the behavior. Notice how the results are reversed as the weight value goes down!

  • weight(1): RANK of KEY 1 is 249
    (results order 1,2,3)
  • weight(0.8): RANK of KEY 1 is 321
    (weight down => rank up, results order 1,2,3)
  • weight(0.2): RANK of KEY 1 is 998
    (weight down => rank up, results order 1,2,3)
  • weight(0.17): RANK of KEY 1 is 802
    (weight down => rank down, results order 2,3,1)
  • weight(0.16): RANK of KEY 1 is 935
    (weight down => rank up, results order 2,1,3)
  • weight(0.01): RANK of KEY 1 is 50
    (weight down => rank down, results order 3,2,1)

As you can see, from 0.2 to 0.17 ranking decreases and results are messed up! From 0.16 results are inverted (the weight values that reproduce this behaviour depend on terms, columns searched, etc).

Microsoft states here that the actual value of RANK is meaningless, but I am sure the results order isn’t!

Reproducing the behavior

These are the exact queries that I used to reproduce this behaviour:

QUERY 1 (weight 1): (Initial ranking)

SELECT * FROM 
+SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

SQL Server: Weird behavior with CONTAINSTABLE, ISABOUT and weighted terms

by George Kosmidis / Published 11 years and 5 months ago, modified 3 years ago

I came across the following weird behavior in an ISABOUT query in SQL SERVER, that involves the weight keyword and the final rank of the results. I want to describe this behavior here, just in case someone has a good explanation for it!

This posts assumes some basic knowledge of querying with full text search

The following bullets, are the sum up of the behavior. Notice how the results are reversed as the weight value goes down!

  • weight(1): RANK of KEY 1 is 249
    (results order 1,2,3)
  • weight(0.8): RANK of KEY 1 is 321
    (weight down => rank up, results order 1,2,3)
  • weight(0.2): RANK of KEY 1 is 998
    (weight down => rank up, results order 1,2,3)
  • weight(0.17): RANK of KEY 1 is 802
    (weight down => rank down, results order 2,3,1)
  • weight(0.16): RANK of KEY 1 is 935
    (weight down => rank up, results order 2,1,3)
  • weight(0.01): RANK of KEY 1 is 50
    (weight down => rank down, results order 3,2,1)

As you can see, from 0.2 to 0.17 ranking decreases and results are messed up! From 0.16 results are inverted (the weight values that reproduce this behaviour depend on terms, columns searched, etc).

Microsoft states here that the actual value of RANK is meaningless, but I am sure the results order isn’t!

Reproducing the behavior

These are the exact queries that I used to reproduce this behaviour:

QUERY 1 (weight 1): (Initial ranking)

SELECT * FROM 
 CONTAINSTABLE(FullTextTable, FullTextColumn, 'ISABOUT ("weird" weight (1) ) ') 
 ORDER BY RANK DESC, [KEY]

Results

   KEY   RANK
     1    249
@@ -43,4 +43,4 @@
             "wordB*" weight (0.1), 
             "wordC*" weight (0.1)
       )'
-)

But for now, and until a better solution is found, I changed the algorithm of the custom word-breaker to always use weights above 0.2!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +)

But for now, and until a better solution is found, I changed the algorithm of the custom word-breaker to always use weights above 0.2!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/swagger-in-asp-net-core-tips-and-tricks.html b/_output/swagger-in-asp-net-core-tips-and-tricks.html index f956bdde4..6d39811a4 100644 --- a/_output/swagger-in-asp-net-core-tips-and-tricks.html +++ b/_output/swagger-in-asp-net-core-tips-and-tricks.html @@ -1,5 +1,5 @@ -Swagger in ASP.NET Core: Tips & Tricks

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Swagger in ASP.NET Core: Tips & Tricks

by George Kosmidis / Published 4 years and 2 months ago
Swagger in ASP.NET Core: Tips & Tricks

This post contains a few tips and tricks that can help you transform your swagger UI into an interactive documentation. If you don’t yet know how to install swagger in ASP.NET Core, this post will help you Get started with Swagger and ASP.NET Core.

How to change the URL of the Swagger UI

By default, the Swagger UI can be found at http://localhost:<port>/swagger. To change the path and set, for example, the Swagger UI at the app’s root, use:

app.UseSwaggerUI(c =>
+Swagger in ASP.NET Core: Tips & Tricks

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Swagger in ASP.NET Core: Tips & Tricks

by George Kosmidis / Published 4 years and 2 months ago
Swagger in ASP.NET Core: Tips & Tricks

This post contains a few tips and tricks that can help you transform your swagger UI into an interactive documentation. If you don’t yet know how to install swagger in ASP.NET Core, this post will help you Get started with Swagger and ASP.NET Core.

How to change the URL of the Swagger UI

By default, the Swagger UI can be found at http://localhost:<port>/swagger. To change the path and set, for example, the Swagger UI at the app’s root, use:

app.UseSwaggerUI(c =>
 {
     c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
     c.RoutePrefix = string.Empty;
@@ -103,4 +103,4 @@
 }

And then, after creating your own CSS, feed it to swagger:

app.UseSwaggerUI(c =>
 {
      c.InjectStylesheet("/your_path/your_theme.css");
-}

The end!

Any more configurations you think I should include? Drop me a line, there are sure numerous other tips and tricks!

For a Quick Start guide on how to install Swagger visit Get started with Swagger and ASP.NET Core.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

The end!

Any more configurations you think I should include? Drop me a line, there are sure numerous other tips and tricks!

For a Quick Start guide on how to install Swagger visit Get started with Swagger and ASP.NET Core.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/the-dark-side-of-ai.html b/_output/the-dark-side-of-ai.html index 43d6f8af6..8796181e3 100644 --- a/_output/the-dark-side-of-ai.html +++ b/_output/the-dark-side-of-ai.html @@ -1,2 +1,2 @@ -The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

by George Kosmidis / Published 2 years ago
The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

Introduction

AI has the potential to revolutionize many aspects of our lives, from healthcare and transportation to education and entertainment. It can help us to process and analyze large amounts of data more efficiently, and it has the potential to automate many tasks, freeing up our time and resources to focus on more important things.

But AI has also the potential to negatively impact freely available, publicly available data such as blog posts, code samples, and open source projects. One reason for this is that it can make it easier for people to access this information without having to visit the original source.

The problem in Layman's Terms

Imagine that a blogger writes a series of blog posts and shares them freely with the world. These posts contain valuable information and code samples that are useful to many people. The blogger may offer this information freely because they hope to get some recognition and appreciation in return, such as through website visits and thank you messages.

The reduction in the amount of freely available data will not only have negative consequences for individuals and society as a whole, but it will also affect the ability of AIs to learn new content. Without sufficient quantities of freely available data to train on, AIs may not be able to learn as effectively and may be less capable in the tasks they are designed to perform.

However, if an AI system is trained on the data from these blog posts and is able to provide answers to similar questions or tasks just as efficiently as the original blog, then people may be more likely to use the AI system rather than visit the original blog. This could potentially reduce the number of visits to the blog, which could in turn reduce the motivation of the blogger to continue writing and sharing their content.

Is this vicious circle the end of creativity?

Potential solutions

One potential solution could be to implement laws that forbid companies from training their AI systems with this type of data unless they have obtained written (or other) consent from the original poster. This could help to ensure that the creators of this type of content are fairly compensated and that their work is used ethically.

Additionally, legal bodies could explore whether privacy policies could be extended to include provisions related to the use of publicly available data by AI systems, so that a license of use must be explicitly acquired and its not implicitly assumed by the public nature of these data - something like the 'data protection by design and by default' of GDPR. This could help

Another approach could b eto modify existing open source licenses, such as the MIT license, Apache 2.0 license, and Creative Commons licenses, to accommodate the use of this type of data by AI systems. These licenses are designed to protect the rights of creators and ensure that their work is used ethically. By adapting them to address the use of publicly available data by AI systems, it may be possible to rapidly and effectively address this issue on a global scale.

Finally, it is also possible that a new type of license specifically designed for blog posts and other forms of publicly available data could be "invented" in order to address this issue. This license will not be meant to replace all others, but rather to extend them, giving the creators the possibility to choose weather to install it or not.

Conclusion

In summary, AI has the potential to negatively impact freely and publicly available data such as blog posts, code samples, and open source projects by reducing the incentive for people to create and share this type of content. This is because AI systems that are trained on this data may be able to provide answers to similar questions or tasks just as efficiently as the original source, which could potentially reduce the number of visits to the original source and the motivation of the creator to continue creating and sharing their content.

To address this issue, there are a few potential solutions that could be considered. One approach is to implement laws that forbid companies from training their AI systems with publicly available data unless they have obtained written consent from the original creators. Another possibility is to modify existing open source licenses, such as the MIT license and Creative Commons licenses, to include provisions related to the use of publicly available data by AI systems. Alternatively, a new type of license specifically designed for blog posts and other forms of publicly available data could be "invented" in order to address this issue.

And the plot twist? ChatGPT helped me write this article, but it wasn't a straightforward process. There was no one question or statement that could lead directly to it. Instead, I had to find the right questions and phrase them correctly, and even write paragraphs myself and ask ChatGPT to reformat them to match the rest of the article.

And the second plot twist? I asked ChatGPT to describe a potential feature image for this article, and then I fed that to Dall-E, which produced this feature image.

Here is what ChatGPT returned. The two suggestions were fed separately to Dall-E
"A potential feature image for this article could be a close-up photograph of a computer screen with an image of an AI system on it. The image could be overlaid with text that reads "The Dark Side of AI" in bold, eye-catching letters. The background could be a dark, moody color, such as deep blue or purple, to create a sense of foreboding and emphasize the "dark side" theme. Alternatively, the image could be a stylized illustration of an AI system, with the same text overlaid on top. The overall effect should be to draw the reader's attention and convey the theme of the article: the potential negative impact of AI on freely available, publicly available data."

Dall-E though didnt produce just one! With just a few clicks an endless stream of images appeared, since Dall-E was trained using the "freely and publicly available creations" of artists and photographers all around the world...

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

by George Kosmidis / Published 2 years ago
The Dark Side of AI: How it Could Threaten the Future of Freely Available, Publicly Available Data

Introduction

AI has the potential to revolutionize many aspects of our lives, from healthcare and transportation to education and entertainment. It can help us to process and analyze large amounts of data more efficiently, and it has the potential to automate many tasks, freeing up our time and resources to focus on more important things.

But AI has also the potential to negatively impact freely available, publicly available data such as blog posts, code samples, and open source projects. One reason for this is that it can make it easier for people to access this information without having to visit the original source.

The problem in Layman's Terms

Imagine that a blogger writes a series of blog posts and shares them freely with the world. These posts contain valuable information and code samples that are useful to many people. The blogger may offer this information freely because they hope to get some recognition and appreciation in return, such as through website visits and thank you messages.

The reduction in the amount of freely available data will not only have negative consequences for individuals and society as a whole, but it will also affect the ability of AIs to learn new content. Without sufficient quantities of freely available data to train on, AIs may not be able to learn as effectively and may be less capable in the tasks they are designed to perform.

However, if an AI system is trained on the data from these blog posts and is able to provide answers to similar questions or tasks just as efficiently as the original blog, then people may be more likely to use the AI system rather than visit the original blog. This could potentially reduce the number of visits to the blog, which could in turn reduce the motivation of the blogger to continue writing and sharing their content.

Is this vicious circle the end of creativity?

Potential solutions

One potential solution could be to implement laws that forbid companies from training their AI systems with this type of data unless they have obtained written (or other) consent from the original poster. This could help to ensure that the creators of this type of content are fairly compensated and that their work is used ethically.

Additionally, legal bodies could explore whether privacy policies could be extended to include provisions related to the use of publicly available data by AI systems, so that a license of use must be explicitly acquired and its not implicitly assumed by the public nature of these data - something like the 'data protection by design and by default' of GDPR. This could help

Another approach could b eto modify existing open source licenses, such as the MIT license, Apache 2.0 license, and Creative Commons licenses, to accommodate the use of this type of data by AI systems. These licenses are designed to protect the rights of creators and ensure that their work is used ethically. By adapting them to address the use of publicly available data by AI systems, it may be possible to rapidly and effectively address this issue on a global scale.

Finally, it is also possible that a new type of license specifically designed for blog posts and other forms of publicly available data could be "invented" in order to address this issue. This license will not be meant to replace all others, but rather to extend them, giving the creators the possibility to choose weather to install it or not.

Conclusion

In summary, AI has the potential to negatively impact freely and publicly available data such as blog posts, code samples, and open source projects by reducing the incentive for people to create and share this type of content. This is because AI systems that are trained on this data may be able to provide answers to similar questions or tasks just as efficiently as the original source, which could potentially reduce the number of visits to the original source and the motivation of the creator to continue creating and sharing their content.

To address this issue, there are a few potential solutions that could be considered. One approach is to implement laws that forbid companies from training their AI systems with publicly available data unless they have obtained written consent from the original creators. Another possibility is to modify existing open source licenses, such as the MIT license and Creative Commons licenses, to include provisions related to the use of publicly available data by AI systems. Alternatively, a new type of license specifically designed for blog posts and other forms of publicly available data could be "invented" in order to address this issue.

And the plot twist? ChatGPT helped me write this article, but it wasn't a straightforward process. There was no one question or statement that could lead directly to it. Instead, I had to find the right questions and phrase them correctly, and even write paragraphs myself and ask ChatGPT to reformat them to match the rest of the article.

And the second plot twist? I asked ChatGPT to describe a potential feature image for this article, and then I fed that to Dall-E, which produced this feature image.

Here is what ChatGPT returned. The two suggestions were fed separately to Dall-E
"A potential feature image for this article could be a close-up photograph of a computer screen with an image of an AI system on it. The image could be overlaid with text that reads "The Dark Side of AI" in bold, eye-catching letters. The background could be a dark, moody color, such as deep blue or purple, to create a sense of foreboding and emphasize the "dark side" theme. Alternatively, the image could be a stylized illustration of an AI system, with the same text overlaid on top. The overall effect should be to draw the reader's attention and convey the theme of the article: the potential negative impact of AI on freely available, publicly available data."

Dall-E though didnt produce just one! With just a few clicks an endless stream of images appeared, since Dall-E was trained using the "freely and publicly available creations" of artists and photographers all around the world...

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/the-great-software-engineering-crisis-of-2023.html b/_output/the-great-software-engineering-crisis-of-2023.html index d5d8d45c5..c6e8a122e 100644 --- a/_output/the-great-software-engineering-crisis-of-2023.html +++ b/_output/the-great-software-engineering-crisis-of-2023.html @@ -1,2 +1,2 @@ -The Great Software Engineering Crisis of 2023

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

The Great Software Engineering Crisis of 2023

by George Kosmidis / Published 2 years ago
The Great Software Engineering Crisis of 2023

Introduction

The tech industry is facing a significant turning point in 2022 and 2023 that caused widespread concerns and uncertainty about the future of software engineering jobs. Tens of thousands of employees were impacted as the industry experienced unprecedented layoffs. Amid this tumultuous time in the tech industry, Slalom stands out as a company that has taken a different approach to its employees.

Some Layoff Statistics

The tech industry saw significant layoffs in both 2022 and 2023, with major companies like IBM, Google (Alphabet), Microsoft, Amazon, and Salesforce among those who cut jobs. In 2022, a total of around 160,000 employees were laid off, while in 2023, over 75,000 employees were laid off, with the numbers expected to increase as the year progresses. Some notable layoffs in 2023 include IBM (1.5% of the workforce), Google (Alphabet) (6% of the workforce), Microsoft (4-5% of the workforce), and Salesforce (10% of the workforce).

Hard numbers

  • IBM mass layoffs: 3,900 people
  • Google (Alphabet) mass layoffs: 12,000 people
  • Microsoft mass layoffs: 10,000 people
  • Amazon mass layoffs: 18,000 people
  • Salesforce mass layoffs: 7,000 people
(check appendix for the full list)

Reasons for the layoffs

It could be tempting to just blame the pandemic slowdown and let it go but just recently, Microsoft, which laid off approximately 10,000 employees, announced its plan to invest $10 billion in OpenAI, and Sundar Pichai, CEO of Alphabet, stated for the layoffs that "These are important moments to sharpen our focus, reengineer our cost base, and direct our talent and capital to our highest priorities"

Then what could the reason be?

It is known that the tech industry has experienced a surge in hiring during the Covid-19 pandemic, driven by record revenues and fierce competition for top talent. This has resulted in record-high salaries and media attention focused on extravagant perks offered by tech companies. However, all the massive hirings where not focused around the current text and code generative AI explosion but towards supporting and extending what was present before the pandemic. It is notable that with the recent lay-offs, the median time for an affected employee in their role is approximately two years, which could indicate a reversal of hiring policies put in place during the pandemic and a shift, as Sundar Pichai mentioned, towards higher priorities like Large Language Models.

One could also notice that the use of AI and automation in the hiring process has been on the rise in recent years. Platforms have been developed to automate routine tasks such as reference checks or identity verification during the onboarding process. Reports have even surfaced that companies like Amazon have used AI to identify low-performing employees and initiate termination procedures. The question arises thus, whether the advancements in AI and automation have created a scenario where the quickest way to save money is to replace human employees with machines. While no companies have directly stated automation as a driving force behind recent layoffs, the affected job roles and circumstances suggest that it may be a contributing factor.

In total around than 160000 lost their jobs in 2022, and another 75000 in 2023.

At the end, while it is difficult to determine the exact impact of AI and automation on recent layoffs in the tech industry, it cannot be ignored that such advancements have played and will play a role in the current job market landscape.

The impact of code generative AI on Software Engineering jobs

The rise of code-writing AI tools like ChatGPT and Co-pilot have generated fear and uncertainty about the future of software engineering jobs, but also of open-source code, community articles and more. These tools are capable of generating boilerplate code, leading to concerns about the potential for automation to replace human software engineers, at least to a degree.

Nevertheless, despite concerns, experts believe that human software engineers will remain in high demand in the near future, and these tools will be valuable allies that assist with repetitive tasks such as writing boilerplate code, implementing best practices, and debugging or testing. Currently, AI tools for code writing lack the ability to produce creative and high-quality code and software engineering requires critical thinking, problem-solving, and communication skills that are exclusive to humans.

Although certain aspects of code writing can be automated, particularly those related to declarative languages, human software engineers are expected to retain a crucial role in the tech industry for the foreseeable future.

The Future of the Tech Industry

The tech industry has always been dynamic, adapting and evolving with new developments and breakthroughs. Despite the current crisis, the future of the industry is expected to be bright. As the economy recovers, demand for technology products and services is expected to grow, leading to increased investment in research and development, marketing, and staffing. This growth will provide opportunities for new technologies, such as AI and 5G, to emerge and drive innovation.

Moreover, the increasing adoption of AI and 5G technologies is expected to create new job opportunities in the tech industry. From data scientists and AI engineers, to 5G network specialists and cybersecurity experts, the growth of these new technologies will create a wide range of job opportunities for skilled professionals. As a result, most already believe that the tech industry will continue to be a major source of employment and economic growth in the coming years, providing stability and security for those in the industry and those looking to enter it.

Slalom's Commitment to Employee Security During Economic Downturns

During the COVID-19 pandemic, the company made the decision to not lay off any of its employees and instead found alternative cost-cutting measures. This commitment to its employees demonstrates Slalom's values and dedication to creating a supportive and stable work environment, and it extends beyond simply avoiding layoffs. The company recognizes the value of its workforce and the need to continuously upskill and develop its employees. To achieve this, Slalom has implemented innovative strategies to retrain and repurpose its workforce to meet the changing needs of the business. This approach not only helps to retain valuable employees, but it also ensures that the company has a skilled and adaptable workforce that can stay ahead of industry trends and changes. By investing in its employees, Slalom is able to maintain a competitive edge and create a positive work environment that attracts and retains top talent.

Slalom is a private company that places a strong emphasis on its employees!

Testament to Slalom�s brilliant navigation of the current stormy seas, is the expansion of its presence in new markets. The company already has a strong presence in 45 markets around the world, including the United States, United Kingdom, Australia, New Zealand and Japan, but its recent expansion into Germany marks the beginning of a European invasion, with plans to continue expanding into Ireland, the Netherlands and beyond.

Slalom is committed to continued growth and expansion, which requires a concerted effort to bring on new talent. In support of this growth, the company is currently engaged in an ambitious hiring initiative in Europe, with the goal of significantly expanding its workforce in the region.

Just for Germany the company plans to triple the current workforce, with equally impressive growth goals for the rest of the region.

This growth sprint represents a unique opportunity for the company's 14,000 employees, who have been given the chance to grow and develop along with Slalom at a phenomenal rate. The company's commitment to its employees, coupled with its ambitious growth plans, creates an environment that is both supportive and empowering for all those who are part of the Slalom team.

Interested in joining? Find your future here: https://jobs.slalom.com/

Appendix

2023 mass layoffs

  • IBM layoffs: 1.5% of workforce laid off (January, 2023)
  • Gemini layoffs: 10% of workforce laid off (January, 2023)
  • Yankee Candle layoffs: 13% of office workers laid off (January,2023)
  • 3M layoffs: <1% of workforce laid off (January, 2023)
  • Spotify layoffs: 6% of workforce laid off (January, 2023)
  • Google (Alphabet) layoffs: 6% of workforce laid off (January, 2023)
  • Microsoft layoffs: 4-5% of workforce laid off (January, 2023)
  • Amazon layoffs: 1-2% of workforce laid off (January, 2023)
  • Carta layoffs: 10% of workforce laid off (January, 2023)
  • Coinbase layoffs: 20% of workforce laid off (January, 2023)
  • DirecTV layoffs: 5-6% of workforce laid off (January, 2023)
  • Salesforce layoffs: 10% of workforce laid off (January, 2023)
  • Vimeo layoffs: 11% of workforce laid off (January, 2023)
  • Goldman Sachs layoffs: 8% of workforce laid off (January, 2023)
  • Compass layoffs: size of layoffs not immediately known (January, 2023)
  • Stitch Fix layoffs: 20% of workforce laid off (January, 2023)

2022 mass layoffs

  • Cisco layoffs: 5% of workforce laid off (December, 2022)
  • DoorDash layoffs: 6% of workforce laid off (November, 2022)
  • Candy Digital layoffs: 33% of workforce laid off (November, 2022)
  • Redfin layoffs: 13% of workforce laid off(November, 2022)
  • Amazon layoffs: 1% of workforce laid off beginning (November, 2022)
  • Meta layoffs: 13% of workforce laid off (November, 2022)
  • Twitter layoffs: 50% of workforce laid off (November, 2022)
  • Zillow layoffs: 5% of workforce laid off (October, 2022)
  • Peloton layoffs: 12% of workforce laid off (October, 2022)
  • DocuSign layoffs: 9% of workforce laid off (September, 2022)
  • Taboola layoffs: 6% of workforce laid off (September, 2022)
  • Snapchat layoffs: 20% of workforce laid off (September, 2022)
  • Outbrain layoffs: 3% of workforce laid off (July, 2022)
  • Lyft layoffs: 2% of workforce laid off (July, 2022)
  • The Mom Project layoffs: 15% of workforce laid off (July, 2022)
  • Opensea layoffs: 20% of workforce laid off (July, 2022)
  • Substack layoffs: 14% of workforce laid off (June, 2022)
  • Ninantic layoffs: 8% of workforce laid off (June, 2022)
  • MasterClass layoffs: 20% of workforce laid off (June, 2022)
  • Bird layoffs: 23% of workforce laid off (June, 2022)
  • Superhuman layoffs: 22% of workforce laid off (June, 2022)
  • Cameo layoffs: 25% of workforce laid off (May, 2022)
  • Robinhood layoffs: 9% of workforce laid off (April, 2022)
  • Virgin Hyperloop layoffs: 50% of workforce laid off (February, 2022)
  • Peloton layoffs: 20% of workforce laid off (February, 2022)
  • Beachbody layoffs: 10% of workforce laid off (January, 2022)

Sources

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +The Great Software Engineering Crisis of 2023

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

The Great Software Engineering Crisis of 2023

by George Kosmidis / Published 2 years ago
The Great Software Engineering Crisis of 2023

Introduction

The tech industry is facing a significant turning point in 2022 and 2023 that caused widespread concerns and uncertainty about the future of software engineering jobs. Tens of thousands of employees were impacted as the industry experienced unprecedented layoffs. Amid this tumultuous time in the tech industry, Slalom stands out as a company that has taken a different approach to its employees.

Some Layoff Statistics

The tech industry saw significant layoffs in both 2022 and 2023, with major companies like IBM, Google (Alphabet), Microsoft, Amazon, and Salesforce among those who cut jobs. In 2022, a total of around 160,000 employees were laid off, while in 2023, over 75,000 employees were laid off, with the numbers expected to increase as the year progresses. Some notable layoffs in 2023 include IBM (1.5% of the workforce), Google (Alphabet) (6% of the workforce), Microsoft (4-5% of the workforce), and Salesforce (10% of the workforce).

Hard numbers

  • IBM mass layoffs: 3,900 people
  • Google (Alphabet) mass layoffs: 12,000 people
  • Microsoft mass layoffs: 10,000 people
  • Amazon mass layoffs: 18,000 people
  • Salesforce mass layoffs: 7,000 people
(check appendix for the full list)

Reasons for the layoffs

It could be tempting to just blame the pandemic slowdown and let it go but just recently, Microsoft, which laid off approximately 10,000 employees, announced its plan to invest $10 billion in OpenAI, and Sundar Pichai, CEO of Alphabet, stated for the layoffs that "These are important moments to sharpen our focus, reengineer our cost base, and direct our talent and capital to our highest priorities"

Then what could the reason be?

It is known that the tech industry has experienced a surge in hiring during the Covid-19 pandemic, driven by record revenues and fierce competition for top talent. This has resulted in record-high salaries and media attention focused on extravagant perks offered by tech companies. However, all the massive hirings where not focused around the current text and code generative AI explosion but towards supporting and extending what was present before the pandemic. It is notable that with the recent lay-offs, the median time for an affected employee in their role is approximately two years, which could indicate a reversal of hiring policies put in place during the pandemic and a shift, as Sundar Pichai mentioned, towards higher priorities like Large Language Models.

One could also notice that the use of AI and automation in the hiring process has been on the rise in recent years. Platforms have been developed to automate routine tasks such as reference checks or identity verification during the onboarding process. Reports have even surfaced that companies like Amazon have used AI to identify low-performing employees and initiate termination procedures. The question arises thus, whether the advancements in AI and automation have created a scenario where the quickest way to save money is to replace human employees with machines. While no companies have directly stated automation as a driving force behind recent layoffs, the affected job roles and circumstances suggest that it may be a contributing factor.

In total around than 160000 lost their jobs in 2022, and another 75000 in 2023.

At the end, while it is difficult to determine the exact impact of AI and automation on recent layoffs in the tech industry, it cannot be ignored that such advancements have played and will play a role in the current job market landscape.

The impact of code generative AI on Software Engineering jobs

The rise of code-writing AI tools like ChatGPT and Co-pilot have generated fear and uncertainty about the future of software engineering jobs, but also of open-source code, community articles and more. These tools are capable of generating boilerplate code, leading to concerns about the potential for automation to replace human software engineers, at least to a degree.

Nevertheless, despite concerns, experts believe that human software engineers will remain in high demand in the near future, and these tools will be valuable allies that assist with repetitive tasks such as writing boilerplate code, implementing best practices, and debugging or testing. Currently, AI tools for code writing lack the ability to produce creative and high-quality code and software engineering requires critical thinking, problem-solving, and communication skills that are exclusive to humans.

Although certain aspects of code writing can be automated, particularly those related to declarative languages, human software engineers are expected to retain a crucial role in the tech industry for the foreseeable future.

The Future of the Tech Industry

The tech industry has always been dynamic, adapting and evolving with new developments and breakthroughs. Despite the current crisis, the future of the industry is expected to be bright. As the economy recovers, demand for technology products and services is expected to grow, leading to increased investment in research and development, marketing, and staffing. This growth will provide opportunities for new technologies, such as AI and 5G, to emerge and drive innovation.

Moreover, the increasing adoption of AI and 5G technologies is expected to create new job opportunities in the tech industry. From data scientists and AI engineers, to 5G network specialists and cybersecurity experts, the growth of these new technologies will create a wide range of job opportunities for skilled professionals. As a result, most already believe that the tech industry will continue to be a major source of employment and economic growth in the coming years, providing stability and security for those in the industry and those looking to enter it.

Slalom's Commitment to Employee Security During Economic Downturns

During the COVID-19 pandemic, the company made the decision to not lay off any of its employees and instead found alternative cost-cutting measures. This commitment to its employees demonstrates Slalom's values and dedication to creating a supportive and stable work environment, and it extends beyond simply avoiding layoffs. The company recognizes the value of its workforce and the need to continuously upskill and develop its employees. To achieve this, Slalom has implemented innovative strategies to retrain and repurpose its workforce to meet the changing needs of the business. This approach not only helps to retain valuable employees, but it also ensures that the company has a skilled and adaptable workforce that can stay ahead of industry trends and changes. By investing in its employees, Slalom is able to maintain a competitive edge and create a positive work environment that attracts and retains top talent.

Slalom is a private company that places a strong emphasis on its employees!

Testament to Slalom�s brilliant navigation of the current stormy seas, is the expansion of its presence in new markets. The company already has a strong presence in 45 markets around the world, including the United States, United Kingdom, Australia, New Zealand and Japan, but its recent expansion into Germany marks the beginning of a European invasion, with plans to continue expanding into Ireland, the Netherlands and beyond.

Slalom is committed to continued growth and expansion, which requires a concerted effort to bring on new talent. In support of this growth, the company is currently engaged in an ambitious hiring initiative in Europe, with the goal of significantly expanding its workforce in the region.

Just for Germany the company plans to triple the current workforce, with equally impressive growth goals for the rest of the region.

This growth sprint represents a unique opportunity for the company's 14,000 employees, who have been given the chance to grow and develop along with Slalom at a phenomenal rate. The company's commitment to its employees, coupled with its ambitious growth plans, creates an environment that is both supportive and empowering for all those who are part of the Slalom team.

Interested in joining? Find your future here: https://jobs.slalom.com/

Appendix

2023 mass layoffs

  • IBM layoffs: 1.5% of workforce laid off (January, 2023)
  • Gemini layoffs: 10% of workforce laid off (January, 2023)
  • Yankee Candle layoffs: 13% of office workers laid off (January,2023)
  • 3M layoffs: <1% of workforce laid off (January, 2023)
  • Spotify layoffs: 6% of workforce laid off (January, 2023)
  • Google (Alphabet) layoffs: 6% of workforce laid off (January, 2023)
  • Microsoft layoffs: 4-5% of workforce laid off (January, 2023)
  • Amazon layoffs: 1-2% of workforce laid off (January, 2023)
  • Carta layoffs: 10% of workforce laid off (January, 2023)
  • Coinbase layoffs: 20% of workforce laid off (January, 2023)
  • DirecTV layoffs: 5-6% of workforce laid off (January, 2023)
  • Salesforce layoffs: 10% of workforce laid off (January, 2023)
  • Vimeo layoffs: 11% of workforce laid off (January, 2023)
  • Goldman Sachs layoffs: 8% of workforce laid off (January, 2023)
  • Compass layoffs: size of layoffs not immediately known (January, 2023)
  • Stitch Fix layoffs: 20% of workforce laid off (January, 2023)

2022 mass layoffs

  • Cisco layoffs: 5% of workforce laid off (December, 2022)
  • DoorDash layoffs: 6% of workforce laid off (November, 2022)
  • Candy Digital layoffs: 33% of workforce laid off (November, 2022)
  • Redfin layoffs: 13% of workforce laid off(November, 2022)
  • Amazon layoffs: 1% of workforce laid off beginning (November, 2022)
  • Meta layoffs: 13% of workforce laid off (November, 2022)
  • Twitter layoffs: 50% of workforce laid off (November, 2022)
  • Zillow layoffs: 5% of workforce laid off (October, 2022)
  • Peloton layoffs: 12% of workforce laid off (October, 2022)
  • DocuSign layoffs: 9% of workforce laid off (September, 2022)
  • Taboola layoffs: 6% of workforce laid off (September, 2022)
  • Snapchat layoffs: 20% of workforce laid off (September, 2022)
  • Outbrain layoffs: 3% of workforce laid off (July, 2022)
  • Lyft layoffs: 2% of workforce laid off (July, 2022)
  • The Mom Project layoffs: 15% of workforce laid off (July, 2022)
  • Opensea layoffs: 20% of workforce laid off (July, 2022)
  • Substack layoffs: 14% of workforce laid off (June, 2022)
  • Ninantic layoffs: 8% of workforce laid off (June, 2022)
  • MasterClass layoffs: 20% of workforce laid off (June, 2022)
  • Bird layoffs: 23% of workforce laid off (June, 2022)
  • Superhuman layoffs: 22% of workforce laid off (June, 2022)
  • Cameo layoffs: 25% of workforce laid off (May, 2022)
  • Robinhood layoffs: 9% of workforce laid off (April, 2022)
  • Virgin Hyperloop layoffs: 50% of workforce laid off (February, 2022)
  • Peloton layoffs: 20% of workforce laid off (February, 2022)
  • Beachbody layoffs: 10% of workforce laid off (January, 2022)

Sources

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/things-you-should-know-about-dotnet-5.html b/_output/things-you-should-know-about-dotnet-5.html index 036221cc5..c5a5dde9f 100644 --- a/_output/things-you-should-know-about-dotnet-5.html +++ b/_output/things-you-should-know-about-dotnet-5.html @@ -1,2 +1,2 @@ -Things you should know about .NET 5

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Things you should know about .NET 5

by George Kosmidis / Published 4 years ago
Things you should know about .NET 5

I know many of you are waiting for an LTS to jump in and upgrade your systems, but I think this time things are a bit different! First of all, the next LTS will be .NET 6 which is planned for November 2021, and secondly .NET 5 is already published two months ago as RC1. Actually, two release candidates of .NET 5 were published and tested by many before the actual release:

VersionRelease DateEnd of Support
.NET 5 RC 2October 13, 2020November 10, 2020
.NET 5 RC 1September 14, 2020October 13, 2020

In this post, we will go through some of the important things of .NET 5, things you should know before you jump in – and you should!

.NET release cadence

Before we go through this major release, let’s see the plan: Microsoft plans to publish new major releases of .NET on a regular cadence, enabling developers, the community, and businesses to plan their roadmaps. Starting with .NET 5, these releases will happen every November and every other release will be an LTS release.

.NET Release Schedule
.NET Release Schedule

LTS is an acronym for Long Term Support. LTS releases are supported for three years after the initial release.

Why .NET 5 and not .NET 4?

.NET 5.0 is the next major release of .NET Core following 3.1. Microsoft named this new release .NET 5.0 instead of .NET Core 4.0 for two reasons:

  • Version numbers 4.x would create confusion with .NET Framework 4.x.
  • “Core” is no longer needed to distinguish between which .NET supports what app or platform; .NET 5.0 supports more types of apps and more platforms than .NET Core or .NET Framework.

Dropping “Core” is not always true

.NET 5 is the one and only and this alone definitely clears the confusion, but that is not the case for ASP.NET and Entity Framework!

  • ASP.NET Core upgrades to ASP.NET Core 5, to avoid confusion with ASP.NET MVC 5
  • Entity Framework Core upgrades to Entity Framework Core 5, to avoid confusing it with Entity Framework 5

.NET 5.0 doesn’t replace .NET Framework

There are technologies in .NET Framework that there are no plans to port them to .NET 5, and the reason is, we now have better alternatives! Following a list of these technologies

TechnologyRecommended alternative
Web FormsASP.NET Core Blazor or Razor Pages
Windows Communication Foundation (WCF)gRPC
Windows Workflow (WF)Open-source CoreWF

Although .NET 5.0 is the main implementation of .NET, the one and only for the future to come, .NET Framework 4.x will still be supported.

.NET 5.0 doesn’t replace .NET Standard

Easy to understand why I guess!
If you want to share code between .NET Framework and .NET 5 (or .NET Core) you still need to specify netstandard2.0 as your TFM.

If older support is not in your plans though, new application development can specify the net5.0 target framework moniker (TFM) for all project types, including class libraries. Sharing code between .NET 5 workloads is simplified in that all you need is the net5.0 TFM.

For .NET 5.0 apps and libraries, the net5.0 Target Framework Moniker (TFM) combines and replaces the netcoreapp and netstandard TFMs.

What’s new at a glance

Let’s take a short look of what is new in this first release of the future of .NET. In a future post we will go through these changes one by one and check all the details necessary.

  • C# updates
  • F# updates
  • Visual Basic updates
  • System.Text.Json new features
  • Single file apps
  • App trimming
  • Windows ARM64 and ARM64 intrinsics
  • Tooling support for dump debugging
  • The runtime libraries are 80% annotated for nullable reference types
  • Performance improvements:
    • Garbage Collection (GC)
    • System.Text.Json
    • System.Text.RegularExpressions
    • Async ValueTask pooling
    • Container size optimizations
    • And many more..!

Are you ready for the change?

.NET 5.0 is the one and only, the one to rule them all and this is just a step in a transition to the new .NET that started 3-4 years ago with .NET Core 1. It’s not going to be fast, especially for some huge Web Forms apps out there, but we have a clear way ahead!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Things you should know about .NET 5

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Things you should know about .NET 5

by George Kosmidis / Published 4 years ago
Things you should know about .NET 5

I know many of you are waiting for an LTS to jump in and upgrade your systems, but I think this time things are a bit different! First of all, the next LTS will be .NET 6 which is planned for November 2021, and secondly .NET 5 is already published two months ago as RC1. Actually, two release candidates of .NET 5 were published and tested by many before the actual release:

VersionRelease DateEnd of Support
.NET 5 RC 2October 13, 2020November 10, 2020
.NET 5 RC 1September 14, 2020October 13, 2020

In this post, we will go through some of the important things of .NET 5, things you should know before you jump in – and you should!

.NET release cadence

Before we go through this major release, let’s see the plan: Microsoft plans to publish new major releases of .NET on a regular cadence, enabling developers, the community, and businesses to plan their roadmaps. Starting with .NET 5, these releases will happen every November and every other release will be an LTS release.

.NET Release Schedule
.NET Release Schedule

LTS is an acronym for Long Term Support. LTS releases are supported for three years after the initial release.

Why .NET 5 and not .NET 4?

.NET 5.0 is the next major release of .NET Core following 3.1. Microsoft named this new release .NET 5.0 instead of .NET Core 4.0 for two reasons:

  • Version numbers 4.x would create confusion with .NET Framework 4.x.
  • “Core” is no longer needed to distinguish between which .NET supports what app or platform; .NET 5.0 supports more types of apps and more platforms than .NET Core or .NET Framework.

Dropping “Core” is not always true

.NET 5 is the one and only and this alone definitely clears the confusion, but that is not the case for ASP.NET and Entity Framework!

  • ASP.NET Core upgrades to ASP.NET Core 5, to avoid confusion with ASP.NET MVC 5
  • Entity Framework Core upgrades to Entity Framework Core 5, to avoid confusing it with Entity Framework 5

.NET 5.0 doesn’t replace .NET Framework

There are technologies in .NET Framework that there are no plans to port them to .NET 5, and the reason is, we now have better alternatives! Following a list of these technologies

TechnologyRecommended alternative
Web FormsASP.NET Core Blazor or Razor Pages
Windows Communication Foundation (WCF)gRPC
Windows Workflow (WF)Open-source CoreWF

Although .NET 5.0 is the main implementation of .NET, the one and only for the future to come, .NET Framework 4.x will still be supported.

.NET 5.0 doesn’t replace .NET Standard

Easy to understand why I guess!
If you want to share code between .NET Framework and .NET 5 (or .NET Core) you still need to specify netstandard2.0 as your TFM.

If older support is not in your plans though, new application development can specify the net5.0 target framework moniker (TFM) for all project types, including class libraries. Sharing code between .NET 5 workloads is simplified in that all you need is the net5.0 TFM.

For .NET 5.0 apps and libraries, the net5.0 Target Framework Moniker (TFM) combines and replaces the netcoreapp and netstandard TFMs.

What’s new at a glance

Let’s take a short look of what is new in this first release of the future of .NET. In a future post we will go through these changes one by one and check all the details necessary.

  • C# updates
  • F# updates
  • Visual Basic updates
  • System.Text.Json new features
  • Single file apps
  • App trimming
  • Windows ARM64 and ARM64 intrinsics
  • Tooling support for dump debugging
  • The runtime libraries are 80% annotated for nullable reference types
  • Performance improvements:
    • Garbage Collection (GC)
    • System.Text.Json
    • System.Text.RegularExpressions
    • Async ValueTask pooling
    • Container size optimizations
    • And many more..!

Are you ready for the change?

.NET 5.0 is the one and only, the one to rule them all and this is just a step in a transition to the new .NET that started 3-4 years ago with .NET Core 1. It’s not going to be fast, especially for some huge Web Forms apps out there, but we have a clear way ahead!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/thread-synchronisation-with-semaphoreslim-and-async-await.html b/_output/thread-synchronisation-with-semaphoreslim-and-async-await.html index e62a81aab..e6c183b3a 100644 --- a/_output/thread-synchronisation-with-semaphoreslim-and-async-await.html +++ b/_output/thread-synchronisation-with-semaphoreslim-and-async-await.html @@ -1,5 +1,5 @@ -Thread synchronisation with SemaphoreSlim and async delegate calls

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Thread synchronisation with SemaphoreSlim and async delegate calls

by George Kosmidis / Published 7 years ago, modified 3 years ago

Although running a parallel foreach that makes async calls is a pretty usual task, I found my self in a complicated situation, when async delegate calls got in the way!

The situation arose while I was trying to write a MemoryCache manager for my application (the manager was actually a wrapper of MemoryCache Class).

The following gist file, is a basic structure of what I was trying to do: Ask MemoryCacheManager for an item with AddOrGetExisting by passing a key to find the object and a generic delegate Func task that actually returns the object.

public class SomeClass{
+Thread synchronisation with SemaphoreSlim and async delegate calls

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Thread synchronisation with SemaphoreSlim and async delegate calls

by George Kosmidis / Published 7 years ago, modified 3 years ago

Although running a parallel foreach that makes async calls is a pretty usual task, I found my self in a complicated situation, when async delegate calls got in the way!

The situation arose while I was trying to write a MemoryCache manager for my application (the manager was actually a wrapper of MemoryCache Class).

The following gist file, is a basic structure of what I was trying to do: Ask MemoryCacheManager for an item with AddOrGetExisting by passing a key to find the object and a generic delegate Func task that actually returns the object.

public class SomeClass{
    
     private readonly ICacheManager _cacheManager;
     
@@ -70,4 +70,4 @@
         }
         return (T)item;
     }
-}

* As you can see, there are two _cache.Get(key), a pattern that is called double-check locking. In short, locks are expensive and there is no reason to get one, if the requested object exists in the cache. Read more about that here and here

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

* As you can see, there are two _cache.Get(key), a pattern that is called double-check locking. In short, locks are expensive and there is no reason to get one, if the requested object exists in the cache. Read more about that here and here

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/troubleshooting-you-dont-appear-to-have-an-active-azure-subscription.html b/_output/troubleshooting-you-dont-appear-to-have-an-active-azure-subscription.html index 95673c94d..255635ced 100644 --- a/_output/troubleshooting-you-dont-appear-to-have-an-active-azure-subscription.html +++ b/_output/troubleshooting-you-dont-appear-to-have-an-active-azure-subscription.html @@ -1,2 +1,2 @@ -Troubleshooting “You don’t appear to have an active Azure subscription.”

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Troubleshooting “You don’t appear to have an active Azure subscription.”

by George Kosmidis / Published 4 years and 3 months ago
Troubleshooting “You don’t appear to have an active Azure subscription.”

The message can appear in any service trying to retrieve active Azure Resources either within Azure Portal or from any 3rd party consumer. As an example, it can appear while trying to create an Azure Resource Manager service connection in Azure DevOps.

The reasons found so far are the following three:

  1. Check Subscription Status
  2. Browser Caching / Cookies
  3. Azure Active Directory Security

Details about three possible solutions for each problem follow.

1. Subscription Status

Navigate to Azure portal to check if your subscription status is active. Use the address https://portal.azure.com/?WT.mc_id=DT-MVP-5004591#blade/Microsoft_Azure_Billing/SubscriptionsBlade and check the list:

Microsoft Azure Subscriptions
Microsoft Azure Subscriptions

2. Browser cookies

Either clear all your browser cookies, switch to another browser or use “InPrivate” mode. The last one is the quickest and easiest approach.

3. Azure Active Directory Security

Last but not least, go to portal.azure.com, search for “Tenant properties” and disable Security defaults:

Microsoft Azure - Disable Security defaults
Microsoft Azure - Disable Security defaults

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Troubleshooting “You don’t appear to have an active Azure subscription.”

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Troubleshooting “You don’t appear to have an active Azure subscription.”

by George Kosmidis / Published 4 years and 3 months ago
Troubleshooting “You don’t appear to have an active Azure subscription.”

The message can appear in any service trying to retrieve active Azure Resources either within Azure Portal or from any 3rd party consumer. As an example, it can appear while trying to create an Azure Resource Manager service connection in Azure DevOps.

The reasons found so far are the following three:

  1. Check Subscription Status
  2. Browser Caching / Cookies
  3. Azure Active Directory Security

Details about three possible solutions for each problem follow.

1. Subscription Status

Navigate to Azure portal to check if your subscription status is active. Use the address https://portal.azure.com/?WT.mc_id=DT-MVP-5004591#blade/Microsoft_Azure_Billing/SubscriptionsBlade and check the list:

Microsoft Azure Subscriptions
Microsoft Azure Subscriptions

2. Browser cookies

Either clear all your browser cookies, switch to another browser or use “InPrivate” mode. The last one is the quickest and easiest approach.

3. Azure Active Directory Security

Last but not least, go to portal.azure.com, search for “Tenant properties” and disable Security defaults:

Microsoft Azure - Disable Security defaults
Microsoft Azure - Disable Security defaults

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/unit-testing-a-custom-middleware-in-asp-net-core-api.html b/_output/unit-testing-a-custom-middleware-in-asp-net-core-api.html index f60608401..cd678324a 100644 --- a/_output/unit-testing-a-custom-middleware-in-asp-net-core-api.html +++ b/_output/unit-testing-a-custom-middleware-in-asp-net-core-api.html @@ -1,5 +1,5 @@ -Unit testing a custom middleware in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Unit testing a custom middleware in ASP.NET Core API

by George Kosmidis / Published 5 years and 1 month ago, modified 4 years and 3 months ago

Middlewares are a fundamental part of any ASP.NET Core application, introduced from day one. They are executed in the order they are added on every request, and could be considered similar to the HttpHandlers and HttpModules of the classic ASP.NET. Since middlewares can execute code before or after calling the next in the pipeline, they are considered ideal for a ton of various application features, including exception handling, logging, authentication etc.

You can learn more about middlewares by learning how to create a simple exception handling middleware.

Middlewares offer a powerful and flexible solution and for that, they need to be tested! Thankfully there is a way to do that so let’s first see what we are going to test and then just get in to it (middleware taken from Microsoft Docs):

using Microsoft.AspNetCore.Http;
+Unit testing a custom middleware in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Unit testing a custom middleware in ASP.NET Core API

by George Kosmidis / Published 5 years and 1 month ago, modified 4 years and 3 months ago

Middlewares are a fundamental part of any ASP.NET Core application, introduced from day one. They are executed in the order they are added on every request, and could be considered similar to the HttpHandlers and HttpModules of the classic ASP.NET. Since middlewares can execute code before or after calling the next in the pipeline, they are considered ideal for a ton of various application features, including exception handling, logging, authentication etc.

You can learn more about middlewares by learning how to create a simple exception handling middleware.

Middlewares offer a powerful and flexible solution and for that, they need to be tested! Thankfully there is a way to do that so let’s first see what we are going to test and then just get in to it (middleware taken from Microsoft Docs):

using Microsoft.AspNetCore.Http;
 using System.Globalization;
 using System.Threading.Tasks;
 
@@ -83,4 +83,4 @@
 
     //This time, 'de' should be the two letter ISO language name
     Assert.AreEqual("de", body);
-}

And that was it! Easy right? Happy and safe middlewaring everybody!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

And that was it! Easy right? Happy and safe middlewaring everybody!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/using-litedb-in-an-asp-net-core-api.html b/_output/using-litedb-in-an-asp-net-core-api.html index 7f20089d3..a9bea1895 100644 --- a/_output/using-litedb-in-an-asp-net-core-api.html +++ b/_output/using-litedb-in-an-asp-net-core-api.html @@ -1,8 +1,8 @@ Using LiteDB in an ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using LiteDB in an ASP.NET Core API

by George Kosmidis / Published 5 years ago, modified 4 years and 3 months ago
Using LiteDB in an ASP.NET Core API

LiteDB is serverless MongoDB-like database delivered in a single DLL (less than 350kb) fully written in .NET C# managed code (compatible with .NET 3.5, 4.x, NETStandard 1.3 and 2.0). It is ideal for mobile apps or for small desktop/web apps, and its API is very similar to MongoDB C# Official Driver.

In this post, we will see how to use LiteDB as a storage for an ASP.NET API and do simple CRUD operations with it.

Setting up the project

Assuming basic knowledge on how to create a new .NET Core api, I will just list the necessary commands and continue to the interesting parts:

dotnet new webapi
+ In this post, we will see how to use  LiteDB  as a storage for an ASP.NET API and do simple CRUD operations with it.">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using LiteDB in an ASP.NET Core API

by George Kosmidis / Published 5 years ago, modified 4 years and 3 months ago
Using LiteDB in an ASP.NET Core API

LiteDB is serverless MongoDB-like database delivered in a single DLL (less than 350kb) fully written in .NET C# managed code (compatible with .NET 3.5, 4.x, NETStandard 1.3 and 2.0). It is ideal for mobile apps or for small desktop/web apps, and its API is very similar to MongoDB C# Official Driver.

In this post, we will see how to use LiteDB as a storage for an ASP.NET API and do simple CRUD operations with it.

Setting up the project

Assuming basic knowledge on how to create a new .NET Core api, I will just list the necessary commands and continue to the interesting parts:

dotnet new webapi
 dotnet add package LiteDB
 dotnet build

You could also choose to use Visual Studio to create a new ASP.NET Core Web Application, choose “API” as the project template and finally add the LiteDB nuget package.

Now that we have a project to work and the LiteDB package installed, we should add the actual database file, right? Well no! LiteDB will create a database automatically upon the first request for getting a collection, so we don’t need to worry about that. The only thing we should do though, is keep somewhere the path to the database, and there is no better place for it than the appsettings:

"LiteDbOptions": {
   "DatabaseLocation": "LiteDb/LiteDbTest.db"
@@ -117,4 +117,4 @@
         else
             return NotFound();
     }
-}

The end!

LiteDb is a very easy to use NoSQL database that can be included in small projects very fast. It is also a very nice solution to start playing around with Document DBs so to get familiarize with the different concepts of a relational database.

My playground with LiteDB, including postman calls and the complete API, you can find it in github!

One last thing to conclude this post, would be a way (or two) to check or manipulate data in the database. For this, there is a project called LiteDbExplorer maintained by Josef Nemec that does a pretty decent job, but you could also try the official LiteDB.Studio where you can write SQL-like syntax to check your data.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

The end!

LiteDb is a very easy to use NoSQL database that can be included in small projects very fast. It is also a very nice solution to start playing around with Document DBs so to get familiarize with the different concepts of a relational database.

My playground with LiteDB, including postman calls and the complete API, you can find it in github!

One last thing to conclude this post, would be a way (or two) to check or manipulate data in the database. For this, there is a project called LiteDbExplorer maintained by Josef Nemec that does a pretty decent job, but you could also try the official LiteDB.Studio where you can write SQL-like syntax to check your data.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/using-mariadb-in-an-aspnet-core-api-with-entity-framework-core.html b/_output/using-mariadb-in-an-aspnet-core-api-with-entity-framework-core.html index 2e9cdd6c5..db0d8ec8b 100644 --- a/_output/using-mariadb-in-an-aspnet-core-api-with-entity-framework-core.html +++ b/_output/using-mariadb-in-an-aspnet-core-api-with-entity-framework-core.html @@ -1,8 +1,8 @@ Using MariaDB in an ASP.NET Core API with Entity Framework Core

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using MariaDB in an ASP.NET Core API with Entity Framework Core

by George Kosmidis / Published 4 years and 2 months ago
Using MariaDB in an ASP.NET Core API with Entity Framework Core

MariaDB Server is one of the most popular open source relational databases. It’s made by the original developers of MySQL and guaranteed to stay open source. It is part of most cloud offerings and the default in most Linux distributions.

In this post, we will see how to use MariaDB as storage for an ASP.NET API and do simple CRUD operations with Entity Framework Core.

Installing MariaDB

Visit the https://downloads.mariadb.org/ and download the latest stable version. At the moment of writing this article the last stable version is 10.5.4, so I would suggest to download the MSI packaged named “mariadb-10.5.4-winx64.msi” for easier installation.

You can also download the installation package here: mariadb-10.5.4-winx64.msi.

Installing an MSI package is rather easy, so I am not going to get into details about it. When you’ re done, a shortcut of the management tool that comes with MariaDB will be placed on your desktop; it is called HeidiSQL. It doesn’t feature the best UI around, but you can do all sort of operations with it!

If you wish to go into the MySQL world, I would suggest DBeaver Community Edition as management tool, which you can download here: https://dbeaver.io/download/

Creating the schema

We can use HeidiSQL for this! Double click on the HeidiSQL shortcut, fill in the correct username & password (the ones you gave during installation) and click “Open“. Once done, right click on the server’s entry in the tree on the left (= the topmost one). In its context menu, you have “Create new > Database” that you can use to -obviously- create a new database! Follows an image that makes things a bit clearer!

MariaDB - Create New Database
MariaDB - Create New Database

MySQL case sensitivity depends on the OS, so I would suggest to always use lower case in database and table names.

It is convenient that LiteDB (and MongoDB) is creating collection on demand, but here we need to create the table ourselves. We are going to use Microsoft’s example of a weather forecast API as a base for this post, so the only table needed is a table to store the WeatherForcast object. Just had back to HeidiSQL, and run the following script:

CREATE TABLE `weatherforecasts` (
+ In this post, we will see how to use  MariaDB  as storage for an ASP.NET API and do simple CRUD operations with Entity Framework Core.">  

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using MariaDB in an ASP.NET Core API with Entity Framework Core

by George Kosmidis / Published 4 years and 2 months ago
Using MariaDB in an ASP.NET Core API with Entity Framework Core

MariaDB Server is one of the most popular open source relational databases. It’s made by the original developers of MySQL and guaranteed to stay open source. It is part of most cloud offerings and the default in most Linux distributions.

In this post, we will see how to use MariaDB as storage for an ASP.NET API and do simple CRUD operations with Entity Framework Core.

Installing MariaDB

Visit the https://downloads.mariadb.org/ and download the latest stable version. At the moment of writing this article the last stable version is 10.5.4, so I would suggest to download the MSI packaged named “mariadb-10.5.4-winx64.msi” for easier installation.

You can also download the installation package here: mariadb-10.5.4-winx64.msi.

Installing an MSI package is rather easy, so I am not going to get into details about it. When you’ re done, a shortcut of the management tool that comes with MariaDB will be placed on your desktop; it is called HeidiSQL. It doesn’t feature the best UI around, but you can do all sort of operations with it!

If you wish to go into the MySQL world, I would suggest DBeaver Community Edition as management tool, which you can download here: https://dbeaver.io/download/

Creating the schema

We can use HeidiSQL for this! Double click on the HeidiSQL shortcut, fill in the correct username & password (the ones you gave during installation) and click “Open“. Once done, right click on the server’s entry in the tree on the left (= the topmost one). In its context menu, you have “Create new > Database” that you can use to -obviously- create a new database! Follows an image that makes things a bit clearer!

MariaDB - Create New Database
MariaDB - Create New Database

MySQL case sensitivity depends on the OS, so I would suggest to always use lower case in database and table names.

It is convenient that LiteDB (and MongoDB) is creating collection on demand, but here we need to create the table ourselves. We are going to use Microsoft’s example of a weather forecast API as a base for this post, so the only table needed is a table to store the WeatherForcast object. Just had back to HeidiSQL, and run the following script:

CREATE TABLE `weatherforecasts` (
 	`Id` INT(11) NOT NULL AUTO_INCREMENT,
 	`Date` DATETIME NULL DEFAULT NULL,
 	`TemperatureC` TINYINT(4) NULL DEFAULT NULL,
@@ -170,4 +170,4 @@
         else
             return NotFound();
     }
-}

The end!

MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system (RDBMS), intended to remain free and open-source software under the GNU General Public License. Development is led by some of the original developers of MySQL, who forked it due to concerns over its acquisition by Oracle Corporation in 2009.

Why choose it for your RDBMS instead of SQL Server? Well it’s free and it’s in Azure already!

My playground with MariaDB, including postman calls and the complete API, you can find in https://github.com/georgekosmidis/AspNetCore.MariaDb!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

The end!

MariaDB is a community-developed, commercially supported fork of the MySQL relational database management system (RDBMS), intended to remain free and open-source software under the GNU General Public License. Development is led by some of the original developers of MySQL, who forked it due to concerns over its acquisition by Oracle Corporation in 2009.

Why choose it for your RDBMS instead of SQL Server? Well it’s free and it’s in Azure already!

My playground with MariaDB, including postman calls and the complete API, you can find in https://github.com/georgekosmidis/AspNetCore.MariaDb!

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/using-tpl-dataflow-library-for-concurrency-testing.html b/_output/using-tpl-dataflow-library-for-concurrency-testing.html index 63ca6ac7d..799417af7 100644 --- a/_output/using-tpl-dataflow-library-for-concurrency-testing.html +++ b/_output/using-tpl-dataflow-library-for-concurrency-testing.html @@ -1,5 +1,5 @@ -Using TPL Dataflow Library for Concurrency Testing

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using TPL Dataflow Library for Concurrency Testing

by George Kosmidis / Published 5 years ago

The Task Parallel Library contains a very interesting set of dataflow components that for some reason they didn’t get the attention they deserve. This set is called TPL Dataflow Library and in few words, it is a robust in-process actor library that worth spending some time learning it! In this post, we will learn how to use it for concurrency testing.

What is the Task Parallel Library

The TPL is a set of types and APIs that allow developers to write parallel programs that target multi-core machines. The goal is to simplify the process of adding parallelism and concurrency to applications, by scaling the degree of concurrency dynamically and handling the partitioning of the work, the thread scheduling and other low-level details internally. This allows the developer to maximize performance while focusing on the actual work to be done.

Parallel Programming is taking advantage of multiple CPU cores to execute multiple threads simultaneously. Learn more about it here.

What is the TPL Dataflow Library

It is a set of dataflow components that promote actor-based programming by providing in-process message passing. This dataflow is extremely useful in cases of multiple operations that need to asynchronously talk to each other, for example parsing chunks of data as they arrive. In essence, the TPL Dataflow Library provides a foundation for message passing and parallelizing CPU and IO intensive applications.

The easiness of use can be demonstrated following these simple steps:

  1. Create an ActionBlock
    e.g. var block = new ActionBlock<Uri>(_ => _.DoSomething(uri));
  2. Sent items to it
    e.g. block.SendAsync(new Uri("..."));
  3. Wait until it’s done
    e.g. block.Completion.Wait();

And that’s it!
Of course this is far away from any working solution, but it illustrates perfectly the simplicity upon the dataflow library is build.

Going a bit deeper with ActionBlock

Production code of anything useful should include more than a simple method call: TPL Dataflow supports out of the box cancellation, capacity bound that protects from memory growth, degree of parallelism capping and of course async/awaits. Following, an example that uses the most important of the ActionBlock goodies:

var actionBlock = new ActionBlock<Uri>(
+Using TPL Dataflow Library for Concurrency Testing

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Using TPL Dataflow Library for Concurrency Testing

by George Kosmidis / Published 5 years ago

The Task Parallel Library contains a very interesting set of dataflow components that for some reason they didn’t get the attention they deserve. This set is called TPL Dataflow Library and in few words, it is a robust in-process actor library that worth spending some time learning it! In this post, we will learn how to use it for concurrency testing.

What is the Task Parallel Library

The TPL is a set of types and APIs that allow developers to write parallel programs that target multi-core machines. The goal is to simplify the process of adding parallelism and concurrency to applications, by scaling the degree of concurrency dynamically and handling the partitioning of the work, the thread scheduling and other low-level details internally. This allows the developer to maximize performance while focusing on the actual work to be done.

Parallel Programming is taking advantage of multiple CPU cores to execute multiple threads simultaneously. Learn more about it here.

What is the TPL Dataflow Library

It is a set of dataflow components that promote actor-based programming by providing in-process message passing. This dataflow is extremely useful in cases of multiple operations that need to asynchronously talk to each other, for example parsing chunks of data as they arrive. In essence, the TPL Dataflow Library provides a foundation for message passing and parallelizing CPU and IO intensive applications.

The easiness of use can be demonstrated following these simple steps:

  1. Create an ActionBlock
    e.g. var block = new ActionBlock<Uri>(_ => _.DoSomething(uri));
  2. Sent items to it
    e.g. block.SendAsync(new Uri("..."));
  3. Wait until it’s done
    e.g. block.Completion.Wait();

And that’s it!
Of course this is far away from any working solution, but it illustrates perfectly the simplicity upon the dataflow library is build.

Going a bit deeper with ActionBlock

Production code of anything useful should include more than a simple method call: TPL Dataflow supports out of the box cancellation, capacity bound that protects from memory growth, degree of parallelism capping and of course async/awaits. Following, an example that uses the most important of the ActionBlock goodies:

var actionBlock = new ActionBlock<Uri>(
     async uri =>
     {
         var response = await client.GetAsync(uri);
@@ -64,4 +64,4 @@
 
     // Wait for the ActionBlock object to assert the result.
     actionBlock.Completion.Wait();
-}

Conclusion

Although ActionBlock is the most useful block and alone covers almost all cases, there are more that adding together as puzzle pieces create a flow of information from one block to another, thus the name data flow. The reason behind why this library didn’t get traction it is surely puzzling, especially for the simple ActionBlock. Nevertheless, the applications are potentially unlimited, from just a few lines of code that test your app to biggest complex applications like the Microsoft Advanced Threat Analytics

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +}

Conclusion

Although ActionBlock is the most useful block and alone covers almost all cases, there are more that adding together as puzzle pieces create a flow of information from one block to another, thus the name data flow. The reason behind why this library didn’t get traction it is surely puzzling, especially for the simple ActionBlock. Nevertheless, the applications are potentially unlimited, from just a few lines of code that test your app to biggest complex applications like the Microsoft Advanced Threat Analytics

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/variables-in-bash-and-azure-pipelines.html b/_output/variables-in-bash-and-azure-pipelines.html index a1f6bb5be..de5d0f801 100644 --- a/_output/variables-in-bash-and-azure-pipelines.html +++ b/_output/variables-in-bash-and-azure-pipelines.html @@ -1,5 +1,5 @@ -Variables in Bash and Azure Pipelines

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Variables in Bash and Azure Pipelines

by George Kosmidis / Published 1 week ago
Variables in Bash and Azure Pipelines

Contents

Intro

In this article, we'll explore the basics of variables in Bash, focusing on the role of symbols like $, (, [, and {. Each of these symbols has a specific function in Bash scripting, from referencing variables to grouping commands and conditions. Understanding these will not only enhance your scripting skills but will also give you a better grasp of how similar concepts are applied in Azure Pipelines.

Part 1. Variables in Bash

Bash scripting is a powerful tool for automating tasks in Unix-based systems, and understanding how variables work is fundamental to making the most of it. In this section, we’ll break down how variables are defined and used in Bash, focusing on the key symbols: $, (), [], and {}. Each of these plays a distinct role in how you interact with and manipulate variables within your scripts.

a. The $ Sign

The $ sign is used to reference variables in Bash. When you define a variable, you simply assign a value to a name, like this:

MY_VAR="Hello, World!"
+Variables in Bash and Azure Pipelines

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Variables in Bash and Azure Pipelines

by George Kosmidis / Published 1 week ago
Variables in Bash and Azure Pipelines

Contents

Intro

In this article, we'll explore the basics of variables in Bash, focusing on the role of symbols like $, (, [, and {. Each of these symbols has a specific function in Bash scripting, from referencing variables to grouping commands and conditions. Understanding these will not only enhance your scripting skills but will also give you a better grasp of how similar concepts are applied in Azure Pipelines.

Part 1. Variables in Bash

Bash scripting is a powerful tool for automating tasks in Unix-based systems, and understanding how variables work is fundamental to making the most of it. In this section, we’ll break down how variables are defined and used in Bash, focusing on the key symbols: $, (), [], and {}. Each of these plays a distinct role in how you interact with and manipulate variables within your scripts.

a. The $ Sign

The $ sign is used to reference variables in Bash. When you define a variable, you simply assign a value to a name, like this:

MY_VAR="Hello, World!"
 

To access the value stored in MY_VAR, you prefix it with a $:

echo $MY_VAR
 

This would output Hello, World! to the terminal.

The $ sign is also used for special variables that hold particular data, such as $0 for the script name, $1, $2, etc., for positional parameters passed to the script, and $# for the number of arguments.

b. Parentheses (...)

a=$(command): Parentheses for variables

Parentheses in Bash are primarily used for command substitution and grouping commands. When you use $(...), the command inside the parentheses is executed, and its output is returned and can be stored in a variable:

DATE=$(date)
 echo $DATE
@@ -187,4 +187,4 @@
       artifact: buildOutput
     - script: |
         echo "Deploying build number $(BUILD_NUMBER)"
-

Explanation:

  • Build Stage: In the Build stage, we run a script that sets a variable BUILD_NUMBER using the special ##vso[task.setvariable] syntax. The isOutput=true flag allows this variable to be referenced in subsequent stages. We also publish an artifact named buildOutput that can be used later.

  • Deploy Stage: The Deploy stage depends on the Build stage and retrieves the BUILD_NUMBER variable from the BuildJob. This variable is then used within the DeployJob to echo the build number. The download step retrieves the artifact produced in the Build stage, ensuring the deployment has the necessary build files.

Best Practices for Managing Variables in Complex Pipelines:

  • Consistent Naming Conventions: Use consistent and descriptive names for variables to avoid confusion when passing data between stages.
  • Use Artifacts for Larger Data: If you're passing large or complex data between stages, prefer artifacts over variables to maintain clarity and efficiency.
  • Document Variable Flow: Clearly document which variables are set and used in each stage, especially in large pipelines with multiple stages. This helps in troubleshooting and maintaining the pipeline.
  • Use Secure Files and Secrets: For sensitive data, consider using secure files or Azure Key Vault to manage secrets rather than passing them as plain text variables.

Conclusion

Working with variables in Bash scripting and Azure Pipelines can seem complicated at first, especially with the different ways symbols like $, (, [, and { are used. However, like any skill, it becomes easier with practice. The more you work with these concepts, the more intuitive they will become.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +

Explanation:

Best Practices for Managing Variables in Complex Pipelines:

Conclusion

Working with variables in Bash scripting and Azure Pipelines can seem complicated at first, especially with the different ways symbols like $, (, [, and { are used. However, like any skill, it becomes easier with practice. The more you work with these concepts, the more intuitive they will become.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/visual-studio-2012-4-run-as-administrator-the-application-cannot-start-error.html b/_output/visual-studio-2012-4-run-as-administrator-the-application-cannot-start-error.html index 0a460d36e..764843d6b 100644 --- a/_output/visual-studio-2012-4-run-as-administrator-the-application-cannot-start-error.html +++ b/_output/visual-studio-2012-4-run-as-administrator-the-application-cannot-start-error.html @@ -1,2 +1,2 @@ -Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

by George Kosmidis / Published 11 years ago, modified 3 years ago

After a good 2 hours of searching what the **** happened and Visual Studio stopped working, I finally found a working solution..!

Just copy all dte*.olb files, from C:\Program Files (X86)\Common Files\Microsoft Shared\MSEnv to C:\Program Files X86\Microsoft Visual Studio 9.0\Common7\IDE.

Just for the record, I tried “devenv /resetuserdata” and deleting the involved registry keys with no luck at all. I end up using Process Monitor after reading this post: http://blogs.msdn.com/b/visualstudio/archive/2009/10/29/how-to-fix-the-application-cannot-start-error.aspx?PageIndex=4&WT.mc_id=DT-MVP-5004591.

With a little luck and a lot of tries, I got a headache and a working studio.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Visual Studio 2012.4, “Run As Administrator” -> “The application cannot start” error

by George Kosmidis / Published 11 years ago, modified 3 years ago

After a good 2 hours of searching what the **** happened and Visual Studio stopped working, I finally found a working solution..!

Just copy all dte*.olb files, from C:\Program Files (X86)\Common Files\Microsoft Shared\MSEnv to C:\Program Files X86\Microsoft Visual Studio 9.0\Common7\IDE.

Just for the record, I tried “devenv /resetuserdata” and deleting the involved registry keys with no luck at all. I end up using Process Monitor after reading this post: http://blogs.msdn.com/b/visualstudio/archive/2009/10/29/how-to-fix-the-application-cannot-start-error.aspx?PageIndex=4&WT.mc_id=DT-MVP-5004591.

With a little luck and a lot of tries, I got a headache and a working studio.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file diff --git a/_output/writing-a-custom-outputformatter-to-return-an-excel-xlsx-from-an-action-in-asp-net-core-api.html b/_output/writing-a-custom-outputformatter-to-return-an-excel-xlsx-from-an-action-in-asp-net-core-api.html index f5e37fa58..e69ac1bab 100644 --- a/_output/writing-a-custom-outputformatter-to-return-an-excel-xlsx-from-an-action-in-asp-net-core-api.html +++ b/_output/writing-a-custom-outputformatter-to-return-an-excel-xlsx-from-an-action-in-asp-net-core-api.html @@ -1,5 +1,5 @@ -Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

by George Kosmidis / Published 6 years ago, modified 4 years and 2 months ago
Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

As most of us, I already know my next week work schedule. It includes writing some actions in respond to a requirement for excel exports. It’s nothing new and its’s relatively easy with libraries like NPOI: you just create your excel on the fly and return a FileResult.

Read how to create an excel on the fly inside your action here: http://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages/

And that could be the end of story for that requirement, but while walking home for the weekend I remembered about the XmlSerializerOutputFormatter I read on Microsoft Docs. The idea was to write my own ExcelOutputFormatter to respond to client requests with an Excel instead of a JSON.

OutputFormatter

ASP.NET Core has built-in support for formatting response data, using fixed formats or in response to client requests. Fixed formats could be achieved by using specific action result types like JsonResult or ContentResult, which return application/json or text/plain as Content-Type regardless of client preferences. On the other hand, if we want to format our data based on a client request (e.g. based on the Accept header), we should choose ObjectResult as an action result type that has content negotiation built in to it.

Just a bit off-topic, in total there are 19 action result types that derive from ActionResult. One of them is the ObjectResult that we want, and from that another 16 action result types derive! Just check a bigger version of the graph below, to see the entire ActionResult tree.

ActionResult Inheritance
ActionResult Inheritance Tree.
Check a bigger graph or read the details on Microsoft Docs

Returning to our topic, since we want to use ObjectResult for its build-in content negotiation and we want to avoid returning an ObjectResult for all our actions, we will take advantage of another .NET framework goody:

When returning a model type (a class you’ve defined as your data transfer type), the framework will automatically wrap it in an ObjectResult for you.

This way, our actions will return a typed result and framework will do the dirty job of choosing the right formatter based on the Accept header. All we have to do to take advantage of the ObjectResult build-in goody, is inheriting from the abstract OutputFormatter class and implement what we need.

By studying the OutputFormatter, we can see a few interesting things that we can use in our formatter:

  1. The only abstract method is the WriteResponseBodyAsync, so we definitely have to implement this.
  2. The virtual WriteAsync method acts as a wrapper of WriteResponseHeaders and WriteResponseBodyAsync. We want to return Content Disposition Headers, so we will also need to override WriteResponseHeaders
  3. The virtual CanWriteType always returns true, but our formatter can only be applied over a List of objects and not just an object (each excel row will be an object). We can override this method and add this check.
  4. There is a SupportedMediaTypes property which is used in GetSupportedContentTypes to check if a formatter is supporting the requested media type. We should add our Media Type in this Collection.

By adding all our observations in a class, we end up with the following skeleton of what we want to achieve:

public class ExcelOutputFormatter : OutputFormatter
+Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

George Kosmidis

Microsoft MVP | Speaks of Azure, AI & .NET | Founder of Munich .NET
Building tomorrow @
slalom
slalom

Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

by George Kosmidis / Published 6 years ago, modified 4 years and 2 months ago
Writing a custom OutputFormatter to return an Excel (.xlsx) from an action in ASP.NET Core API

As most of us, I already know my next week work schedule. It includes writing some actions in respond to a requirement for excel exports. It’s nothing new and its’s relatively easy with libraries like NPOI: you just create your excel on the fly and return a FileResult.

Read how to create an excel on the fly inside your action here: http://www.talkingdotnet.com/import-export-excel-asp-net-core-2-razor-pages/

And that could be the end of story for that requirement, but while walking home for the weekend I remembered about the XmlSerializerOutputFormatter I read on Microsoft Docs. The idea was to write my own ExcelOutputFormatter to respond to client requests with an Excel instead of a JSON.

OutputFormatter

ASP.NET Core has built-in support for formatting response data, using fixed formats or in response to client requests. Fixed formats could be achieved by using specific action result types like JsonResult or ContentResult, which return application/json or text/plain as Content-Type regardless of client preferences. On the other hand, if we want to format our data based on a client request (e.g. based on the Accept header), we should choose ObjectResult as an action result type that has content negotiation built in to it.

Just a bit off-topic, in total there are 19 action result types that derive from ActionResult. One of them is the ObjectResult that we want, and from that another 16 action result types derive! Just check a bigger version of the graph below, to see the entire ActionResult tree.

ActionResult Inheritance
ActionResult Inheritance Tree.
Check a bigger graph or read the details on Microsoft Docs

Returning to our topic, since we want to use ObjectResult for its build-in content negotiation and we want to avoid returning an ObjectResult for all our actions, we will take advantage of another .NET framework goody:

When returning a model type (a class you’ve defined as your data transfer type), the framework will automatically wrap it in an ObjectResult for you.

This way, our actions will return a typed result and framework will do the dirty job of choosing the right formatter based on the Accept header. All we have to do to take advantage of the ObjectResult build-in goody, is inheriting from the abstract OutputFormatter class and implement what we need.

By studying the OutputFormatter, we can see a few interesting things that we can use in our formatter:

  1. The only abstract method is the WriteResponseBodyAsync, so we definitely have to implement this.
  2. The virtual WriteAsync method acts as a wrapper of WriteResponseHeaders and WriteResponseBodyAsync. We want to return Content Disposition Headers, so we will also need to override WriteResponseHeaders
  3. The virtual CanWriteType always returns true, but our formatter can only be applied over a List of objects and not just an object (each excel row will be an object). We can override this method and add this check.
  4. There is a SupportedMediaTypes property which is used in GetSupportedContentTypes to check if a formatter is supporting the requested media type. We should add our Media Type in this Collection.

By adding all our observations in a class, we end up with the following skeleton of what we want to achieve:

public class ExcelOutputFormatter : OutputFormatter
 {
     public ExcelOutputFormatter()
     {
@@ -183,4 +183,4 @@
 }

Configuring ExcelOutputFormatter

When an Accept header appears in a request, the framework will try to find a formatter that can produce a response in one of the formats specified by the accept header, and to do this it will iterate through the FormatterCollection. This is a collection accessible through MVC’s configuration in Startup.cs, and formatters added there are evaluated in the order you insert them (the first one takes precedence).

Since no other available formatter can respond to an Accept:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet header, the ExcelOutputFormatter can be added at the end:

services.AddMvc(options =>
 {
     options.OutputFormatters.Add(new ExcelOutputFormatter());
-});

There are two additional ways to either force a particular response format in an action, or by allowing the client to request a particular format from the URL, both in Microsoft Docs.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file +});

There are two additional ways to either force a particular response format in an action, or by allowing the client to request a particular format from the URL, both in Microsoft Docs.

This page is open source. Noticed a typo? Or something unclear?
Edit Page Create Issue Discuss
Microsoft MVP - George Kosmidis
Azure Architecture Icons - SVGs, PNGs and draw.io libraries
 
\ No newline at end of file