How can I host a TCP Listener in Azure?
Cloud Service Worker Role
This definitely looks like it will work. However that means I have to use a Cloud Service, and I miss out on the features and simplicity offered by the App Service. The Cloud Service documentation also specifically describes how to open the required TCP ports.
Definitely works.
https://msdn.microsoft.com/en-us/library/azure/gg557553.aspx
In ServiceDefinition.csdef:
<Endpoints> <InputEndpoint name="RawTCP" protocol="tcp" port="54321" localPort="54321" /></Endpoints>
App Service
In a Logic App (preferred), however this doesn't seem to natively support a TCP >listener, so I would look to build a custom API App. Alternatively I could create a Web Job. ...
Can I expose arbitrary TCP ports on the App Service? ...
Can I host a TCP Listener in an Azure App Service?
No and No. Only 80/TCP and 443/TCP are exposed publicly and the only protocol that works is HTTP. You can't do custom listeners with App Service.
See the sandbox limitations listed here:https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#network-endpoint-listening
Feel free to make a pull request in the Azure documentation if this limitation is not mentioned on the App Service page.
Service Fabric would be a cool 3rd (or 1st?) option:https://azure.microsoft.com/en-us/services/service-fabric/
I raised a support ticket and confirmed this with Microsoft.
[In the App Service] Azure doesn’t support customized port and only support http protocol. These 2 reasons deny the use of TCP listener.
Also further collaborating information this question; Can I open ports on Azure Websites?