2011-09-26 162 views
0

我一直在玩一個pollingDuplex的例子,這讓我瘋狂。我正在使用customBinding集成readerQuotas元素,並且不斷收到錯誤消息:「合同需要雙工,但綁定的'BasicHttpBinding'不支持它或者沒有正確配置以支持它。」 BasicHttpBinding來自何時使用customBinding?我檢查了無數的例子,並且我的配置文件與他們的配置文件相匹配,但它不起作用。誰能幫我這個 ? 謝謝。WCF customBinding問題

<configuration> 
<system.serviceModel> 

<extensions> 
    <bindingElementExtensions> 
    <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexElement, System.ServiceModel.PollingDuplex"/> 
    </bindingElementExtensions> 
</extensions> 

<bindings> 
    <customBinding> 
    <binding name="DBNotification" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"> 
     <httpsTransport maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
     maxReceivedMessageSize="2147483647"/> 
     <pollingDuplex duplexMode="MultipleMessagesPerPoll" maxPendingSessions="2147483647" maxPendingMessagesPerSession="2147483647"/> 
     <binaryMessageEncoding> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binaryMessageEncoding> 
    </binding> 
    </customBinding> 
</bindings> 

<services> 
    <service name="AdminWebService" behaviorConfiguration="DBNotificationServiceBehavior"> 
    <endpoint address="adminservice" binding="customBinding" bindingConfiguration="DBNotification" contract="AdminWebService.IAdminWebService" /> 
    <endpoint address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange"/> 
    </service> 
</services> 

<behaviors> 
     <serviceBehaviors>  
    <behavior name="DBNotificationServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     <serviceThrottling maxConcurrentSessions="2147483647"/> 
    </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer> 

+0

我不知道是否屬於這種情況,但是您可以嘗試在您的自定義綁定中更改元素的順序,使得傳輸是最後一個(即'',''然後'')? IIRC當你使用代碼來創建一個自定義綁定時,這個命令被強制執行。 – carlosfigueira

+0

不,同樣的事情。這就像它正在檢查另一個宇宙中的另一個web.config文件。 – algorunescu

回答

0

您可能會遇到「簡化配置」問題 - 在http://blogs.msdn.com/b/endpoint/archive/2009/11/09/common-user-mistake-in-net-4-mistyping-the-service-configuration-name.aspx處詳細描述。 <service>元素中的「name」屬性必須是該服務的完全限定名稱。由於您的界面是AdminWebService.IAdminWebService,是不是您的服務名稱AdminWebService.AdminWebService?如果是這樣,修復name屬性應該可以解決問題。

+0

該死的就是這樣。我實際上讀過這個問題,但沒有在我的配置中發現它。誤導我的是,當我使用一個簡單的[ServiceContract]時,同樣的配置工作得很完美,但是一旦我將它變成[ServiceContract(CallbackContract = typeof(IDuplexClient))]來實現客戶端回調,就會彈出錯誤消息。非常感謝 !我正在試圖找出那個問題。 – algorunescu

0

難道httpGetEnabled="true"意味着使用BasicHttpBinding?你真的需要這個功能嗎?如果您評論此行,錯誤會消失嗎?

+0

我也這麼想過。試圖評論它並將其設置爲false。一樣。莫名其妙地轉換爲BasicHttpBinding。 – algorunescu

+0

@algorunescu:你可以提供你的自定義綁定實現嗎? – Dyppl