(请阅读评论,因为我有一个修复)
嗨,
我创建了一个 WCF 服务,我使用 .net 4.0 在 Windows 7 上的 IIS 7.5 中
托管该服务同时托管在 http 和 net.tcp 上。
- net.tcp://localhost:42/Service/MyService.svc
- http://localhost:43/Service/MyService.svc
我已经使用 WcfTestClient 测试了我的服务,它似乎可以通过 basicHttp 和 netTcp 正常工作。
但是,当我尝试通过我的 ASP.NET 网站使用此服务时,我在尝试通过 nettcp 时收到错误消息
我的客户端端点如下所示
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Generic_HttpBinding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="Generic_Binding" sendTimeout="00:01:00" receiveTimeout="00:01:00" maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000000">
<security mode="None"/>
<readerQuotas maxDepth="2000000" maxStringContentLength="2000000" maxArrayLength="2000000" maxBytesPerRead="2000000" maxNameTableCharCount="2000000"/>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="EndPointHttp" address="http://localhost:43/Service/MyService.svc" binding="basicHttpBinding" bindingConfiguration="Generic_HttpBinding" contract="NameSpace.Services.Contracts.IService"></endpoint>
<endpoint name="EndPoint" address="net.tcp://localhost:42/Service/MyService.svc" binding="netTcpBinding" bindingConfiguration="Generic_Binding" contract="NameSpace.Services.Contracts.IService"></endpoint>
</client>
现在我以完全相同的方式调用服务,只是交换我的端点名称
var factory = new ChannelFactory<IService>(SuppliedEndpointName);
factory.Open();
var proxy = factory.CreateChannel();
var result = proxy.SomeServiceMethod();
如果我通过这个方法basicHttpBinding它完美地工作。
第二次我交换到 nettcp,我立即收到此错误:
例外:套接字连接被中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或者是潜在的网络资源问题造成的。本地套接字超时为“00:01:00”。
内部异常:远程主机强制关闭现有连接
错误代码:10054
请任何人都可以帮助我,这让我发疯。
我肯定安装了 WCF HTTP 激活和非 HTTP 激活功能。
我已将我的绑定设置为不同端口上的 HTTP 和 net.tcp。
我已在 IIS 中将启用的协议设置为 http,net.tcp。
我已禁用我的防火墙。我已经为 .net 4.0 运行了 aspnet_regiis -i
帮助!
我终于发现将我的安全模式更改为传输可以解决问题。
但是我的服务将其安全模式设置为无。
那么为什么我的客户端只能在安全模式传输上工作呢?