2009-12-29 23 views
7

Uygulamamda WCF hizmetini kullanıyorum. Hizmet sınıfında özel bir nesne döndürmem gerekiyor. yöntem aşağıdaki gibidir:WCF hizmeti: Özel nesneler döndürme

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

İç İstisna:

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

Can

i hizmet için bir arama yaptığınızda
IService.cs: 
[OperationContract] 
object GetObject(); 

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

, aşağıdaki iletiyle bir istisna atar WCF hizmetinden nesne türlerini veya özel nesneleri mi döndürüyoruz?

+0

WCF hizmetinizi nerede barındırıyorsunuz? –

cevap

13

:

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

Şimdi şöyle servis arayüzünü değiştirin:

[OperationContract]  
MyClass GetMyClass(); 

Ve hizmetinizi:

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

"object" yerine belirli bir tür döndürmelisiniz. Bir "nesne" herhangi bir türde olabilir.

+0

Bu kötü tasarım olduğunu kabul ederken, WCF nesnesi ele alabileceğini hissediyorum – Steve

+2

"nesne" bir joker karakteridir. Bu, herhangi bir şeyi iade edebileceğiniz anlamına geliyor. WCF'ye, 'ServiceKnownTypeAttribute' özelliğini kullanarak hangi türden iade edilebileceğini söylemeniz gerekecek. –

0

Özel nesneler iyidir, MS artık [DataContract] veya [datamember] özelliklerini kullanmanız gerekmediğini söylerken, onlar olmadan başarılı olamadım. Özel nesneyi nitelikleriyle işaretlemeyi ve neler olup bittiğini görmeyi deneyin. Izleme açmak ve izleme için svcutil kullanarak açık bir şekilde neler olduğu hakkında daha fazla bilgi alabilirsiniz.

Sen DataContract özniteliği ile işaretlenmiş bir sınıfın örneğini döndürmesi gerekir