EAP,System.ServiceModel.CommunicationException: The TransportManager failed to listen on the supplied URI using the NetTcpPortSharing service: failed to start the service because it is disabled. An administrator can enable it by running 'sc.exe config
时间: 2025-08-24 12:20:46 浏览: 4
<think>好的,我现在需要解决用户提出的关于System.ServiceModel.CommunicationException错误的问题,特别是因为NetTcpPortSharing服务被禁用导致的。用户还提到使用sc.exe命令来启用服务。首先,我需要回忆一下WCF服务中NetTcpPortSharing的作用。这个服务允许多个进程共享同一个TCP端口,这在托管多个服务时非常有用,可以避免端口冲突。如果这个服务被禁用,当尝试使用netTcpBinding并且启用了端口共享时,就会抛出CommunicationException。
接下来,我应该考虑如何启用NetTcpPortSharing服务。用户提到了使用sc.exe config命令,所以我需要确认正确的命令格式。通常,启用服务需要设置启动类型为自动,并启动服务。可能需要以管理员权限运行命令提示符。
然后,我需要检查是否有其他相关配置可能导致这个异常,例如绑定配置中的maxReceivedMessageSize或readerQuotas设置,但这些可能属于其他类型的CommunicationException,比如消息大小超过限制的情况。不过用户的问题明确指向端口共享服务被禁用,所以应聚焦于此。
另外,还需要提醒用户在启用服务后,确保在服务的配置文件中正确启用了端口共享。例如,在终结点配置中添加portSharingEnabled="true",或者在绑定配置中设置相关属性。
可能还需要验证服务是否真的启动成功,是否有防火墙或权限问题阻止服务运行。例如,NetTcpPortSharing服务依赖于哪些其他服务?是否需要开启Windows Process Activation Service(WAS)?不过通常NetTcpPortSharing服务本身依赖DCOM和RPC等服务,但可能用户的问题比较简单,只需要启用该服务即可。
最后,应该给出分步骤的解决方案,包括命令行操作、配置文件的修改,以及验证步骤。同时,考虑到用户可能对命令行不熟悉,需要给出具体的命令示例,并强调管理员权限的重要性。可能还需要提到如果服务无法启动,如何检查错误日志,比如使用事件查看器。
总结步骤:
1. 使用sc config设置NetTcpPortSharing服务为自动启动。
2. 启动服务。
3. 检查配置文件中的端口共享设置。
4. 确保服务启动成功,并处理可能的权限或依赖问题。
5. 提供验证方法,如测试服务连接。
同时,需要引用之前的相关引用内容,但用户提供的引用中有关于maxReceivedMessageSize的解决方案,但当前问题不涉及消息大小,所以可能不需要引用这些,但如果有其他相关配置需要检查,可以适当提及。不过用户的问题比较明确,主要是端口共享服务未启用,所以应专注于该点。</think>针对因NetTcpPortSharing服务禁用导致的$System.ServiceModel.CommunicationException$错误,以下是分步解决方案:
### 一、启用NetTcpPortSharing服务
1. **以管理员身份运行命令提示符**
右键点击"命令提示符" > 选择"以管理员身份运行"
2. **修改服务启动类型为自动**
```cmd
sc.exe config NetTcpPortSharing start= auto
```
*注意:等号后需保留空格*
3. **手动启动服务**
```cmd
net start NetTcpPortSharing
```
### 二、验证服务状态
```cmd
sc query NetTcpPortSharing
```
正常状态应显示为$STATE : 4 RUNNING$
### 三、配置WCF服务
在服务端配置文件中确保启用端口共享:
```xml
<system.serviceModel>
<services>
<service name="YourService">
<endpoint
address="net.tcp://localhost:8080/YourService"
binding="netTcpBinding"
bindingConfiguration="PortSharingBinding"
contract="IYourContract" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="PortSharingBinding" portSharingEnabled="true">
<!-- 可选:调整消息大小限制 -->
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"/>
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
</system.serviceModel>
```
### 四、防火墙配置
开放TCP端口(示例为8080):
```cmd
netsh advfirewall firewall add rule name="WCF_NETTCP" dir=in action=allow protocol=TCP localport=8080
```
### 五、验证步骤
1. 重启服务宿主程序
2. 使用$telnet$测试端口连通性:
```cmd
telnet localhost 8080
```
**注意**:若服务仍无法启动,可检查系统日志(事件查看器 > Windows日志 > 应用程序)定位具体错误[^1][^2]。
阅读全文
相关推荐


















