tags:

views:

209

answers:

3

I'm using WCF service in my application. I need to return a custom object in the service class. The method is as follows:

IService.cs:
[OperationContract]
object GetObject();

Service.cs
public object GetObject() 
{
  object NewObject = "Test";
  return NewObject;
}

Whenever i make a call to the service, it throws an exception with the following message:

System.ServiceModel.CommunicationException: "An error occured while receiving the HTTP response to <service path>"

Inner Exception:

System.Net.WebException: "The underlying connection was closed. An unexpected error occured on receive"

Can't we return object types or custom objects from the WCF service?

A: 

You should return a specific type, not "object". An "object" could be of any type.

John Saunders
while I agree that this is poor design, I feel that WCF should be able to handle object
Steve
"object" is a wildcard. It means you could be returning anything at all. You'll need to tell WCF what sorts of thing you could be returning, by using the `ServiceKnownTypeAttribute`.
John Saunders
A: 

Custom objects are fine, while MS says you don't have to use the [DataContract] or [datamember] attributes anymore, I haven't been successful without them. Try marking you custom object with the attributes and seeing what is going on. You can get more information as to what is explicitly happening by turning on tracing and using svcutil to get trace.

Steve
+1  A: 

You should return an instance of a class that is marked with the DataContract attribute:

[DataContract]
public class MyClass
{
    [DataMember]
    public string MyString {get; set;}
}

Now change your service interface like so:

[OperationContract]    
MyClass GetMyClass();  

And your service:

public MyClass GetMyClass()      
{     
    return new MyClass{MyString = "Test"};     
} 
klausbyskov