如何解决Azure 容器中的 WorkerService TCPListener
首先,我对英语感到抱歉,我正在使用谷歌翻译。
我需要创建一个 TCPListener 服务,以便我的 PLC 可以通过 IP 和 PORT 发送数据
对于这个解决方案,我创建了一个 WorkerService .net core 3.1 并将应用程序托管在一个带有 .net core 的 linux 容器中
DockerFile:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
WORKDIR / app
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR / src
COPY ["FarkServerWorker / FarkServerWorker.csproj","FarkServerWorker /"]
RUN dotnet restore "FarkServerWorker / FarkServerWorker.csproj"
COPY. .
WORKDIR "/ src / FarkServerWorker"
Dotnet build RUN "FarkServerWorker.csproj" -c Release -o / app / build
FROM build AS publish
RUN dotnet publish "FarkServerWorker.csproj" -c Release -o / app / publish
FROM base AS final
WORKDIR / app
COPY --from = publish / app / publish.
EXPOSE 5000
ENTRYPOINT ["dotnet","FarkServerWorker.dll"]
我配置了我的 csproj 并包含一个 8000:5000 端口映射参数
.csproj:
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UserSecretsId>dotnet-FarkServerWorker-FB1AB114-8679-48FC-826C-BF42B6F51505</UserSecretsId>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileRunArguments>-p 6000:5000</DockerfileRunArguments>
</PropertyGroup>
运行 localhost docker 时,通信工作正常
ClienteTcp(控制台):
using var ClienteTCP = new TcpClient("127.0.0.1",6000);
using var Stream = ClienteTCP.GetStream();
//Request
var DataRequest = Encoding.ASCII.GetBytes(Mensagem);
Stream.Write(DataRequest,DataRequest.Length);
//Response
var DataResponse = new Byte[256];
var BytesResponse = Stream.Read(DataResponse,DataResponse.Length);
return Encoding.ASCII.GetString(DataResponse,BytesResponse);
TCPServer(WorkerService):
var ServerTCP = new TcpListener(IPAddress.Any,5000);
ServerTCP.Start();
var BytesReceived = new Byte[256];
while (true)
{
using var ClienteRecebido = await ServerTCP.AcceptTcpClientAsync();
using var Stream = ClienteRecebido.GetStream();
int i;
while ((i = Stream.Read(BytesReceived,BytesReceived.Length)) != 0)
{
var DataReceived = Encoding.ASCII.GetString(BytesReceived,i);
var DataResponse = Encoding.ASCII.GetBytes(DataReceived.ToUpper());
Stream.Write(DataResponse,DataResponse.Length);
_logger.LogInformation("Recebido: {0}",DataReceived);
}
}
正如我所说,这在使用以下命令运行 docker 时非常有效:
docker container run -d -p 6000: 5000 farkapp
但是我在azure上发帖,却无法发送和接收数据
我使用应用程序的虚拟 IP 和端口 6000,但它不起作用,只有 localhost 起作用
错误:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。