我在本地计算机上托管了一个WCF服务作为Windows服务。现在我正在尝试在客户端添加服务引用(再次在我的本地开发机器上),但是我收到错误
元数据包含无法解析的引用: '的net.tcp://本地主机:8523 /服务1'。无法连接到 的net.tcp://本地主机:8523 /服务1。连接尝试持续了一段时间 时间跨度00:00:02.0011145。 TCP错误代码10061:无连接 可以制作,因为目标机器主动拒绝它
我检查过Windows防火墙没有阻止端口8523.我甚至在Windows防火墙中创建了一个新规则,允许运行8523端口。但是当我正在运行netstat -sp tcp
时,我似乎无法找到端口8523.但我可以看到Serice1服务的状态在服务中设置为START。这是配置文件
服务库
<system.serviceModel>
<services>
<service name="WcfServiceLibrary1.Service1">
<endpoint
address=""
binding="netTcpBinding" bindingConfiguration=""
contract="WcfServiceLibrary1.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint
address="mex"
binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8523/Service1" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Windows服务项目中的配置看起来完全相同。
答案 0 :(得分:4)
迈克尔,这是我通常用于WCF服务的net.tcp绑定。
<bindings>
<netTcpBinding>
<binding name="TcpBinding"
receiveTimeout="Infinite"
sendTimeout="Infinite"
maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<reliableSession inactivityTimeout="Infinite"/>
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
尝试将其添加到您的配置中:
<service name="WcfServiceLibrary1.Service1">
<endpoint
address=""
binding="netTcpBinding" bindingConfiguration="TcpBinding"
contract="WcfServiceLibrary1.IService1">
...
此外,我的服务正在ServiceAccount.LocalSystem
下运行。
检查
netstat - ap tcp
如果服务正在收听。
编辑:我的服务类如下。请注意,Windows服务的当前目录以编程方式设置为BaseDirectory,即可执行文件的目录。
public class Service : ServiceBase
{
public static void Main()
{
Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
ServiceBase.Run(new Service());
}
...
}
答案 1 :(得分:1)
您已指定了某个行为,但尚未为其指定名称。为您的行为指定一个名称,并使用您服务中的behaviorConfiguration指向该行为。
<service name="WcfServiceLibrary1.Service1" behaviorConfiguration="svc1behavior">
...
<serviceBehaviors>
<behavior name="svc1behavior">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
答案 2 :(得分:0)
检查Net.Tcp侦听器适配器服务是否正在运行(尽管如果它在控制台应用程序中托管服务时有效,它应该正在运行)。
要查找您的服务正在使用的端口,
netstat -ano | findstr *PID*
答案 3 :(得分:0)
有同样的问题。经过大量的故障排除后,我发现我在服务项目中缺少对Web服务中的服务的引用,所以我将其添加到Web.config中:
<system.serviceModel>
<services>
<service name="serviceName" behaviorConfiguration="BasicServiceBehavior" >
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicServiceBasicHttpBinding" contract="(I<nameofservice>)"/>
</service>
</services>
</system.serviceModel>
在此之后重建解决方案(创建接口)并重新发布。然后我终于可以从我的其他项目添加服务引用。