我使用 net.tcp 绑定(bind)控制台应用程序自行托管了 .NET Framework 4.x 版本的 WCF,该应用程序作为自托管 WCF 服务在 Azure k8s 容器中运行
暴露为net.tcp://CONTAINERIP:5000/WCFServiceName
并且端口 5000 通过负载均衡器类型入口服务公开
因此客户端将像下面一样访问此服务
net.tcp://LoadBalancerIP:5000/containerAppName/WCFServiceName
但是使用负载均衡器 IP 不会将请求转发到容器 - 出现错误。
'net.tcp://LoadBalancerIp:5000/ContainerAppName/WCFServiceName 上没有监听端点可以接受该消息。这通常是由不正确的地址或 SOAP 操作引起的。有关详细信息,请参阅 InnerException(如果存在)。'
LBYaml
spec:
clusterIP: IP.ADDRESS.OF.CLUSTER
externalTrafficPolicy: Cluster
ports:
- name: nettcp
nodePort: 30412
port: 5000
protocol: TCP
targetPort: 5000
selector:
app: CONTAINERAPPNAME
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: LB.PUBLIC.IP.ADDRESS
有什么想法或建议吗?
最佳答案
感谢大家的投入,
问题原因已找到,由于应用是使用LoadBalancer类型的服务部署的,所以不需要在URL中提供APP Name。
当外界访问该服务时:
net.tcp://LoadBalancerIP:5000/containerAppName/WCFServiceName - 不起作用
net.tcp://LoadBalancerIP:5000/WCFServiceName - 这有效! (解决方案)
或
当我们进行自托管时,我们需要在 URI 框架中包含应用程序名称来托管 WCF TCP 服务。
关于azure - Kubernetes 容器中的自托管 net.tcp wcf 通过 kubernetes 的负载均衡器 IP 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66569971/