1

我在 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.ServiceModel.Channels.SocketConnectionListener.Listen() 处的 Net.Sockets.Socket.Bind(EndPoint localEP) --- 内部异常堆栈跟踪的结束 --- System.ServiceModel.Channels.SocketConnectionListener.Listen() 处。 ServiceModel.Channels.ConnectionAcceptor。

我遵循的过程如下所示:

  1. 我停止了服务以释放 .exe 文件。
  2. 我使用 'installutil /u ...' 来卸载我的服务。
  3. 我将所需的功能添加到服务库中。
  4. 我重建了库,然后重建了 Windows 服务。
  5. 我使用“installutil ...”来安装服务。
  6. 我使用 service.msc 来启动服务(即 Autostart)。
  7. 我尝试将服务引用更新到 TestClient 和 Boom - 错误。
  8. 我再次执行了第 1-7 步,但这次更改 /mex 和默认服务地址以使用不同的端口(根据:http: //msdn.microsoft.com/en-us/library/aa702636.aspx
  9. 再次执行第 7 步并且 Boom - 再次出错

我又对服务进行了几次调整和摆弄,重写了客户端等。似乎没有任何效果。有趣的是第一次尝试效果很好,现在出现了问题。我已经使用“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>
          <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>

...

4

0 回答 0