net.tcp Windows服务 - 测试客户端错误地狱:System.ServiceModel.AddressAlreadyInUseException

时间:2013-10-02 19:16:22

标签: wcf visual-studio-2012 windows-services net.tcp wcftestclient

我在service.msc服务列表中编写并部署了一项服务。然后我写了一个测试客户端来测试一些功能。基本的“第一次”尝试完美无缺。问题是当我回去并添加新操作时,我不断收到以下错误:

System.ServiceModel.AddressAlreadyInUseException:IP端点0.0.0.0:8080上已有一个侦听器。如果有另一个应用程序已在此端点上侦听,或者如果服务主机中有多个服务端点具有相同的IP端点但具有不兼容的绑定配置,则可能会发生这种情况。 ---> System.Net.Sockets.SocketException:通常只允许使用每个套接字地址(协议/网络地址/端口)    在System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot,SocketAddress socketAddress)    在System.Net.Sockets.Socket.Bind(EndPoint localEP)    在System.ServiceModel.Channels.SocketConnectionListener.Listen()    ---内部异常堆栈跟踪结束---    在System.ServiceModel.Channels.SocketConnectionListener.Listen()    在System.ServiceModel.Channels.ConnectionAcceptor.StartAccepting()    在System.ServiceModel.Channels.ExclusiveTcpTransportManager.OnOpen()

我遵循的流程如下:

  1. 我停止了服务以释放.exe文件。
  2. 我使用'installutil / u ...'来卸载我的服务。
  3. 我添加了服务库所需的功能。
  4. 我重建了库,然后重建了Windows服务。
  5. 我使用'installutil ...'来安装服务。
  6. 我使用service.msc启动服务(即自动启动)。
  7. 我尝试更新对TestClient和Boom的服务引用 - 错误。
  8. 我再次执行了步骤1-7,但这次更改/ mex和默认服务地址以使用不同的端口(per:http://msdn.microsoft.com/en-us/library/aa702636.aspx
  9. 再次执行第7步和Boom - Error Again
  10. 我再次调整和调整了服务几次,重写了客户端等。似乎没什么用。有趣的是它第一次尝试很好,现在有问题。我已经确保我的服务是使用'netstat -aon'和'tasgmgr.exe'的唯一一个端口。一切都很好看。主机运行,测试客户端的一切都很好。现在端点使用不同的端口,因此应根据在线文档解决TCP Mex问题。我在这里错过了什么吗?我能够使用'svcutil'生成代理,并确保App.Config数据不会冲突。

    以下是App.Config数据(因为我正在使用配置文件):

    HOST App.Config(服务):

          <service name="SomeServiceLib.SomeService">
            <endpoint address="net.tcp://localhost:8080/SomeService" binding="netTcpBinding" contract="SomeServiceLib.ISomeService">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="net.tcp://localhost:8081/SomeService/mex" binding="mexTcpBinding" contract="IMetadataExchange" />
          </service>
        </services>
    
        <behaviors>
          <serviceBehaviors>
            <behavior>
              <!-- NOTE: If net.tcp, must set each to false to avoid exception -->
              <serviceMetadata httpGetEnabled="False" httpsGetEnabled="False"/>
              <!-- To receive exception details in faults for debugging purposes, 
              set the value below to true.  Set to false before deployment 
              to avoid disclosing exception information -->
              <serviceDebug includeExceptionDetailInFaults="False" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
    

    CLIENT App.Config:

            <client>
              <endpoint address="net.tcp://localhost:8080/SomeService" 
                        binding="netTcpBinding" bindingConfiguration="NetTcpBinding_SomeService" 
                        contract="SomeService" 
                        name="Svc_DefaultEndpoint">
                <identity>
                  <dns value="localhost" />
                </identity>
              </endpoint>
              <endpoint address="net.tcp://localhost:8081/SomeService/mex" 
                        binding="mexTcpBinding" 
                        contract="IMetadataExchange" 
                        name="Svc_MexEndpoint">
                <identity>
                  <dns value="localhost" />
                </identity>
              </endpoint>
            </client>
            <bindings>
              <netTcpBinding>
                <binding name="NetTcpBinding_SomeService" />
              </netTcpBinding>
            </bindings>
    

    ...

0 个答案:

没有答案