WCF: Having problems with one-way callbacks

I keep getting this cryptic error when calling a one-way callback to a WPF client from a WCF service.

The message cannot be transmitted within the allotted time 00:01:00. There was no free space in the reliable transmission of the channel window. The time allotted for this may have been part of a longer timeout.

It does not send too much data, just a list of lines in which there is only one short line.

My server has the following configuration:

<xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="RawDealService.GameService"> <endpoint address ="" binding="wsDualHttpBinding" bindingConfiguration="basicConfig" contract="MyService.IGameService"> <identity> <dns value="localhost"/> </identity> </endpoint> </service> </services> <bindings> <wsDualHttpBinding> <binding name="basicConfig" messageEncoding="Text"> <security mode="None"/> </binding> </wsDualHttpBinding> </bindings> <behaviors> <serviceBehaviors> <behavior> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration> 

And my client has the following configuration:

 <?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <bindings> <wsDualHttpBinding> <binding name="WSDualHttpBinding_IGameService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" /> <security mode="None"> <message clientCredentialType="Windows" negotiateServiceCredential="true" /> </security> </binding> </wsDualHttpBinding> </bindings> <client> <endpoint address="http://localhost:44259/GameService.svc" binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_IGameService" contract="IGameService" name="WSDualHttpBinding_IGameService"> <identity> <dns value="localhost" /> </identity> </endpoint> </client> </system.serviceModel> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" /> </startup> </configuration> 

He is simply puzzled that this could happen, given that the message is relatively small and the callback is only one way. Should I try a few different bindings?

+6
timeout wpf binding wcf
source share
2 answers

I found a problem, and unfortunately this error message sent me a completely wrong path.

My DataContract installation had some classes with inheritance in it, and I'm not correctly tagged for KnownType s.

I assume that at some point, the client tried to de-serialize the related object and failed. The error should be handled gracefully by the framework, and perhaps it continued to try to send again and again and did not receive a response after a minute.

Perhaps if I had a two-way call, I would get a more informative stack trace.

+6
source share

This smells like a lock / thread problem, not a network problem.

Do you accidentally block / expect a one-way message to be received on the client? If this is the case, and you use the synchronization context, you block WCF - block the message queue waiting for the message, while the message cannot be received until the message queue is unlocked.

If so, you need to either set UseSynchronizationContext=false on your client, or avoid blocking while waiting for a message.

However, I do not have much experience with WsDualHttpBinding.

+3
source share

All Articles