About This Page
This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.
Bias Analysis
Bias Types:
⚠️
windows_first
⚠️
missing_linux_example
⚠️
windows_tools
⚠️
powershell_heavy
Summary:
The documentation is heavily oriented toward Windows development environments, specifically Visual Studio on Windows, and .NET Framework (not .NET Core or .NET 5/6+). All instructions, screenshots, and project templates are for Windows/Visual Studio. There are no references to Linux, cross-platform .NET, or alternative development environments. The use of Windows-specific project types (Console App (.NET Framework), ASP.NET Web Application (.NET Framework)), and instructions such as 'Run as administrator' and reliance on the Web Platform Installer, further reinforce the Windows-centric approach. No Linux or cross-platform alternatives are mentioned or demonstrated.
Recommendations:
- Add instructions for setting up the development environment on Linux (and macOS), including using Visual Studio Code or JetBrains Rider, and .NET Core/.NET 6+.
- Provide equivalent examples using .NET Core or .NET 6+ project templates (which are cross-platform), rather than .NET Framework-only templates.
- Include command-line instructions for dotnet CLI (dotnet new, dotnet add package, dotnet run, etc.) alongside Visual Studio GUI steps.
- Clarify which parts of the tutorial are Windows-only (e.g., WCF on .NET Framework), and suggest alternatives or workarounds for Linux users (such as using CoreWCF or gRPC).
- Mention and demonstrate how to run and debug the sample applications on Linux, including any required configuration changes.
- If certain features are not available on Linux, explicitly state this and provide links to relevant tracking issues or alternative approaches.
Create pull request
Flagged Code Snippets
namespace ProductsServer
{
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
// Define the data contract for the service
[DataContract]
// Declare the serializable properties.
public class ProductData
{
[DataMember]
public string Id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Quantity { get; set; }
}
// Define the service contract.
[ServiceContract]
interface IProducts
{
[OperationContract]
IList<ProductData> GetProducts();
}
interface IProductsChannel : IProducts, IClientChannel
{
}
}
namespace ProductsWeb.Controllers
{
using System.Linq;
using System.ServiceModel;
using System.Web.Mvc;
using Microsoft.ServiceBus;
using Models;
using ProductsServer;
public class HomeController : Controller
{
// Declare the channel factory.
static ChannelFactory<IProductsChannel> channelFactory;
static HomeController()
{
// Create shared access signature token credentials for authentication.
channelFactory = new ChannelFactory<IProductsChannel>(new NetTcpRelayBinding(),
"sb://yourServiceNamespace.servicebus.windows.net/products");
channelFactory.Endpoint.Behaviors.Add(new TransportClientEndpointBehavior {
TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(
"RootManageSharedAccessKey", "yourKey") });
}
public ActionResult Index()
{
using (IProductsChannel channel = channelFactory.CreateChannel())
{
// Return a view of the products inventory.
return this.View(from prod in channel.GetProducts()
select
new Product { Id = prod.Id, Name = prod.Name,
Quantity = prod.Quantity });
}
}
}
}
namespace ProductsServer
{
using System;
using System.Linq;
using System.Collections.Generic;
using System.ServiceModel;
// Implement the IProducts interface.
class ProductsService : IProducts
{
// Populate array of products for display on website
ProductData[] products =
new []
{
new ProductData{ Id = "1", Name = "Rock",
Quantity = "1"},
new ProductData{ Id = "2", Name = "Paper",
Quantity = "3"},
new ProductData{ Id = "3", Name = "Scissors",
Quantity = "5"},
new ProductData{ Id = "4", Name = "Well",
Quantity = "2500"},
};
// Display a message in the service console application
// when the list of products is retrieved.
public IList<ProductData> GetProducts()
{
Console.WriteLine("GetProducts called.");
return products;
}
}
class Program
{
// Define the Main() function in the service application.
static void Main(string[] args)
{
var sh = new ServiceHost(typeof(ProductsService));
sh.Open();
Console.WriteLine("Press ENTER to close");
Console.ReadLine();
sh.Close();
}
}
}
<services>
<service name="ProductsServer.ProductsService">
<endpoint address="sb://yourServiceNamespace.servicebus.windows.net/products" binding="netTcpRelayBinding" contract="ProductsServer.IProducts" behaviorConfiguration="products"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="products">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="RootManageSharedAccessKey" key="yourKey" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>
</behaviors>