5

(请阅读评论,因为我有一个修复)
嗨,

我创建了一个 WCF 服务,我使用 .net 4.0 在 Windows 7 上的 IIS 7.5 中
托管该服务同时托管在 http 和 net.tcp 上。

我已经使用 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

帮助!


我终于发现将我的安全模式更改为传输可以解决问题。
但是我的服务将其安全模式设置为无。
那么为什么我的客户端只能在安全模式传输上工作呢?

4

1 回答 1

8

netTcpBinding默认情况下,带有签名和加密的传输安全性。尝试删除security元素 ( <security mode="None"/>)。


低于 8000(肯定低于 1024)的端口通常不能安全地用于服务。尝试使用安全端口。

于 2011-04-14T21:39:17.737 回答