Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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网络tcp端口共享_C#_.net_Wcf_Tcp - Fatal编程技术网

C# WCF网络tcp端口共享

C# WCF网络tcp端口共享,c#,.net,wcf,tcp,C#,.net,Wcf,Tcp,我有2个WCF服务,每个都托管在自己的控制台应用程序中 它们位于: net.tcp://computername:7777/Service1 net.tcp://computername:7777/Service2 每个人都有自己的合同。 我希望它们使用相同的端口,因此我阅读了很多关于这个主题的文章,并做了以下工作: 已启用网络tcp端口共享服务 使用以下命令注册url's: netsh http add urlacl user=domain\username url=net.tcp://+:

我有2个WCF服务,每个都托管在自己的控制台应用程序中

它们位于:

net.tcp://computername:7777/Service1
net.tcp://computername:7777/Service2
每个人都有自己的合同。 我希望它们使用相同的端口,因此我阅读了很多关于这个主题的文章,并做了以下工作:

  • 已启用网络tcp端口共享服务
  • 使用以下命令注册url's:
  • netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service1

    netsh http add urlacl user=domain\username url=net.tcp://+:7777/Service2

  • 为每个WCF服务在中的绑定上启用了
    PortSharingEnabled=true
  • 在它自己的控制台应用程序中托管每一个
  • 如果我同时启动两个控制台应用程序,则第二个控制台应用程序在调用主机的
    Open()
    方法时总是会出现此异常:

        AddressAlreadyInUseException. The transport manager failed to listen on the supplied 
        URI using the NetTcpPortSharing service: the URI is already registered with the 
        service.
    
    当我把它们放在同一个控制台应用程序中时,一切正常


    我的问题是:当每个服务都托管在自己的控制台应用程序中时,如何让它工作。

    正如Jon_Lindeheim和您所说的,这应该很好。因此,我从头开始重新创建了所有内容,如下所示:

    我有两个WCF服务,它们具有相同的基址和不同的相对URI
    即 服务1:

        <add baseAddress = "net.tcp://computername:7777/" />
        ...
        <endpoint address = "/service1" ... />
    
        <add baseAddress = "net.tcp://computername:7777/service1/" />
        ...
        <endpoint address = "/service1" ... />
    
    
    ...
    
    服务2:

        <add baseAddress = "net.tcp://computername:7777/" />
        ...
        <endpoint address = "/service2" ... />  
    
        <add baseAddress = "net.tcp://computername:7777/service2/" />
        ...
        <endpoint address = "/service2" ... />  
    
    
    ...
    
    我不知道基址必须是不同的,不仅仅是最终的绝对URI

    因此,以下方法很好: 服务1:

        <add baseAddress = "net.tcp://computername:7777/" />
        ...
        <endpoint address = "/service1" ... />
    
        <add baseAddress = "net.tcp://computername:7777/service1/" />
        ...
        <endpoint address = "/service1" ... />
    
    
    ...
    
    服务2:

        <add baseAddress = "net.tcp://computername:7777/" />
        ...
        <endpoint address = "/service2" ... />  
    
        <add baseAddress = "net.tcp://computername:7777/service2/" />
        ...
        <endpoint address = "/service2" ... />  
    
    
    ...
    
    (为什么第一种错误的方式在所有进程都在一个进程中时仍然有效,我认为这与端口共享以基于进程的方式路由流量的方式有关)


    再次感谢

    我用它复制了您的所有步骤,除了“使用命令注册url:”在Windows 7、.NET 4.5中。似乎您已经完成了端口共享所需的一切。只需仔细检查以下内容:1您使用portsharingEnabled=true创建了绑定,是否在标记端点(在配置文件中)中设置了bindingConfiguration值?2使用另一个端口号尝试您的程序,以防您以前测试程序中的设置阻止了端口共享的发生。3据我所知,端口共享不需要netsh命令。@Jon_Lindeheim谢谢,至少我知道它应该可以工作。我所需要做的就是从头开始重新创造一切,希望我所犯的错误会迎刃而解。我会试着发回ASAP@yyou谢谢你花时间帮忙