Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 指定WCF客户端源端口_C#_.net_Wcf_Tcp_Port - Fatal编程技术网

C# 指定WCF客户端源端口

C# 指定WCF客户端源端口,c#,.net,wcf,tcp,port,C#,.net,Wcf,Tcp,Port,我在某个地址上发布了一个WCF服务,我想通过VisualStudio中生成的代理与之通信 我希望来自代理的消息通过特定的TCP源端口发送,但它显然会在每次调用时分配一个随机端口 问题是:我有两台主机A和B正在运行WCF服务(每台主机上都相同),主机A在地址AdA和端口PA上提供服务,主机B在地址AdB和端口PB上提供服务。主机A向主机B发送一条消息。主机B在消息之后执行一些内部操作,然后向主机A发送一条消息。问题是,当主机A调用B上的webmethod时,它发送一条带有随机src端口的TCP消息

我在某个地址上发布了一个WCF服务,我想通过VisualStudio中生成的代理与之通信

我希望来自代理的消息通过特定的TCP源端口发送,但它显然会在每次调用时分配一个随机端口

问题是:我有两台主机A和B正在运行WCF服务(每台主机上都相同),主机A在地址AdA和端口PA上提供服务,主机B在地址AdB和端口PB上提供服务。主机A向主机B发送一条消息。主机B在消息之后执行一些内部操作,然后向主机A发送一条消息。问题是,当主机A调用B上的webmethod时,它发送一条带有随机src端口的TCP消息,该端口与A承载服务的端口不匹配,因此,不会在上调用webmethod,因为WCF分配的源端口与发布服务的端口不匹配

到目前为止,我一直在使用BasicHttpBinding

我怎样才能做到这一点


谢谢。

netPeerTcpBinding允许您指定出站端口号

我认为不可能为任何类型的网络通信分配源端口,因为它必须是唯一的

源端口是TCP/IP分配给服务器的下一个可用编号 客户这个分配的号码是如何转换网络地址的 方法确定将响应发送回哪个用户(请参阅NAT)。 尽管同一客户编号可在内部同时使用 成千上万的组织,每个TCP/IP网络都跟踪自己的网络 仅在该网络内使用的分配号码。结合 端口号和IP地址称为“套接字”

阅读更多:

问题是,当主机A调用B上的webmethod时,它会发送 带有随机src端口的TCP消息,以及与 承载服务的端口,因此webmethod不是 在上调用,因为WCF分配的源端口不匹配 发布服务的端口


没有理由仅仅因为从另一个web服务接收到响应就调用web方法。您必须显式调用该服务。如果您希望在响应调用B的过程中调用A,那么服务B中的代码必须进行该调用。虽然如果有两个方法像这样互相调用,那么它只是来回的,所以需要一个退出条件。如果您提供更多关于您试图实现的目标的详细信息,我可能会提供更多建议。

也许最好让社区知道您为什么需要此功能?这是错误的,NAT用于将私有地址和端口映射到NAT映射的公共地址和端口。另外,您对套接字的定义也不正确;特别是因为基本上有两种类型的套接字,UDP和TCP;UDP套接字由源IP地址和端口号标识,TCP由源IP、源端口、目标IP、目标端口标识。端口号不必是唯一的,它们实际上是循环使用的,并用于传输层解复用。TcpClient类有一个采用本地端点(ip和端口)的构造函数。此绑定在.NET 4.5中已过时