Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WCF method called twice

I have a web service which is returning data to the desktop application. The problem I am having is, when the web service returns small volume of data everything works fine but when the volume of data is large it throws the following exception:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.

And when I am debugging the web service, I see that this particular method is called twice. It executes the return statement 1st time nothing happens, but when it does execute it for the second time the above mentioned exception is thrown in the desktop app.

I found similar posts before on stackoverflow but they did not solve my problem. Can anybody please tell me what's going on in here?

Thanks!

like image 532
Saurabh Lalwani Avatar asked Apr 19 '10 16:04

Saurabh Lalwani


4 Answers

It could be because the size of the message is greater than the default message size. You might try increasing the this value in the configuration of the endpoint. You could also take a look at this post.


UPDATE:

To further diagnose the problem I would suggest you activating the trace on the service by putting the following in the config file:

<system.diagnostics>
    <trace autoflush="true">
    </trace>
    <sources>
        <source name="System.ServiceModel"
                switchValue="Information, ActivityTracing"
                propagateActivity="true">
            <listeners>
                <add name="sdt"
                     type="System.Diagnostics.XmlWriterTraceListener"
                     initializeData="WcfDetailTrace.e2e" />
            </listeners>
        </source>
    </sources>
</system.diagnostics>

This will generate the WcfDetailTrace.e2e trace file which you could open with the Service Trace Viewer Tool which will provide you with extensive information about the call and the error message.

like image 153
Darin Dimitrov Avatar answered Sep 21 '22 21:09

Darin Dimitrov


I recently had this issue.

It turned out that analyzing the WCF log as written by the System.Diagnostics.XmlWriterTraceListener yielded a problem with the data contract I had set up.

I am returning Dictionary<int, object> (Side Note: Yes, I know this is really bad!, but I am young and need the money). I forgot to include the [KnownType] attribute on the return value for the DataContract:

    [DataContract]
    [KnownType(typeof(Dictionary<int, double>))]
    [KnownType(typeof(Dictionary<int, ChannelData>))]
    [KnownType(typeof(Dictionary<string, Dictionary<int, double>>))]
    public class MyCoolObject: ICoolObject
    {
[DataMember]
        public Dictionary<string, object> Results
        {
            get { return _results; }
            set { _results = value; }
        }
    }
like image 24
Batgar Avatar answered Sep 24 '22 21:09

Batgar


I too had this issue. For me, it was happening because I had a [DataMember] property with a get{} but no set{}. After adding a set{} this behavior stopped.

like image 44
phillipwei Avatar answered Sep 20 '22 21:09

phillipwei


I encountered this same problem. It turned out WCF couldn't return DateTime as JSON, so I had to make it Nullable<DateTime>.

like image 45
Robotronx Avatar answered Sep 20 '22 21:09

Robotronx