2011-04-14 93 views
5

(请仔细阅读评论,因为我有一个修复)
嗨,WCF服务调用使用basicHttpBinding的工作,但失败NetTcpBinding的

我已经创建了我在IIS 7.5在Windows 7中使用.NET托管WCF服务4.0
该服务托管在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它完美的作品。
第二I交换到nettcp,我立即收到此错误:

例外:套接字连接被中止。这可能是由处理您的消息时出错或远程主机超出接收超时或基础网络资源问题引起的。本地套接字超时为'00:01:00'。

内部异常:一个现有的连接被强行关闭远程主机

错误代码:10054

请谁能帮助我,我都快疯了。
我已经明确安装了WCF HTTP激活和非HTTP激活功能。
我已经设置我的绑定是HTTP和net.tcp在不同的端口上。
我已将启用的协议设置为http,net.tcp在IIS中。
我禁用了我的防火墙。 我已经为.net 4.0运行aspnet_regiis -i

帮助!


我终于发现,将我的安全模式更改为传输可以修复问题。
但是我的服务把它的安全模式设置为none。
那么为什么我的客户端只能使用安全模式传输呢?

+0

通常情况下,经过几个小时的排除故障后,我发现提交后发现了问题分钟。我复制了我的WcfTestClient配置来找到它。 我已将添加到我的服务和客户端。但由于某种原因,客户端点不会像这样工作。通过将其改为<安全模式= “运输”> <传输clientCredentialType = “视窗” 的ProtectionLevel = “EncryptAndSign”/> <消息clientCredentialType = “视窗”/> 的问题已经得到解决。我的服务仍然没有安全模式。 为什么? – WebDude 2011-04-14 21:43:30

+0

您是否看到该服务在该端口上侦听?在netstat – rerun 2011-04-14 21:44:38

+0

这只在内部运行。我向该港口做了几次成功的电话。 netstat显示我的服务在该端口上侦听。根据Aliostad的建议,我现在已将端口更改为4000范围 – WebDude 2011-04-14 21:52:02

回答

8

netTcpBinding默认运输安全与签署和加密。尝试删除security元素(<security mode="None"/>)。


另外8000(绝对下1024)下

端口通常是不可靠的用于服务。尝试使用安全端口。

+0

谢谢,那正是我的问题。当WcfTestClient在其传输中设置安全模式时,我看到了这一点。 – WebDude 2011-04-14 21:48:18

+0

太棒了!很高兴它被分类... – Aliostad 2011-04-14 21:49:45

相关问题