Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# Azure服务总线继电器定期断开_C#_Wcf_Azure_Tcp - Fatal编程技术网

C# Azure服务总线继电器定期断开

C# Azure服务总线继电器定期断开,c#,wcf,azure,tcp,C#,Wcf,Azure,Tcp,我正在用Azure服务总线中继实现一个服务主机。实施非常直接: Program.cs: public class Program { public static void Main(string[] args) { var random = new Random(Environment.TickCount); ServiceHost sh = new ServiceHost(typeof(ProblemSolver)); var

我正在用Azure服务总线中继实现一个服务主机。实施非常直接:

Program.cs:

public class Program
{
    public static void Main(string[] args)
    {
        var random = new Random(Environment.TickCount);

        ServiceHost sh = new ServiceHost(typeof(ProblemSolver));

        var endpoint = sh.Description.Endpoints[0];
        var serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
        endpoint.Behaviors.Add(serviceRegistrySettings);
        string randomText = random.Next().ToString();
        var listenUri = new Uri(endpoint.Address.Uri, randomText  + "/");
        endpoint.ListenUri = listenUri;

        sh.Open();
        Console.WriteLine("Hosted: " + randomText);
        Console.ReadLine();
        sh.Close();
    }
}
app.config:

<bindings>
  <netTcpRelayBinding>
    <binding name="default">
      <security mode="None" relayClientAuthenticationType="RelayAccessToken" />
    </binding>
  </netTcpRelayBinding>
</bindings>
<services>
  <service name="RelayPrototype.ProblemSolver">
    <endpoint contract="RelayServiceContract.IProblemSolver"
              binding="netTcpRelayBinding"
              bindingConfiguration="default"
              address="sb://test.servicebus.windows.net/problemSolver/"
              listenUri ="sb://test.servicebus.windows.net/problemSolver/"
              behaviorConfiguration="sbTokenProvider"/>
  </service>
</services>
<behaviors>
  <endpointBehaviors>
    <behavior name="sbTokenProvider">
      <transportClientEndpointBehavior>
        <tokenProvider>
          <sharedAccessSignature keyName="RootManageSharedAccessKey" key="[mykey]" />
        </tokenProvider>
      </transportClientEndpointBehavior>
    </behavior>
  </endpointBehaviors>
</behaviors>

我面临的问题是,一旦托管,每隔2分钟就会定期断开连接

此时,服务主机的TCP状态从已建立更改为关闭等待

监视TCP流量时,我发现源ns-sb2-prod-sg3-001.cloudapp.net发送了一个包含FIN标志的数据包,我怀疑这可能是导致断开连接的原因

服务主机将在一段时间后再次尝试建立与Azure的连接。一旦再次建立连接,断开循环将继续

然而,这种情况只发生在我的本地机器上。该服务可以在其他环境设置中的计算机上正常承载

这可能是我对服务主机的实现,还是与本地网络有关

这可能是我对服务主机的实现,还是与本地网络有关


如果您看到正在发送FIN,则表示实体(客户端和服务器)正在故意关闭连接。因此,在应用程序的实现中,而不是在网络中。转换到关闭等待意味着FIN已被接收和确认,接收FIN的一方需要调用
close

上述问题已得到解决。中继服务似乎使用TCP端口5671与Azure通信。我们的网络防火墙没有打开该端口,因此强制关闭已建立的连接。因此,应该打开TCP端口5671与Azure进行通信。

这有助于稍微澄清一些问题。你知道Azure为什么尝试关闭连接吗?这是建立后2分钟的固定间隔。@No。不熟悉Azure。可能是持久性TCP连接的一些设置?为什么在外部机器上托管会很好,而不是在本地机器上托管呢?跟踪托管服务触发的事件
关闭事件