2011-04-14 118 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

相關問題