2009-12-29 41 views
7

Tôi đang sử dụng dịch vụ WCF trong ứng dụng của mình. Tôi cần trả về một đối tượng tùy chỉnh trong lớp dịch vụ. Phương pháp này như sau:Dịch vụ WCF: Trả lại các đối tượng tùy chỉnh

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

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

Bất cứ khi nào tôi thực hiện cuộc gọi đến các dịch vụ, nó ném một ngoại lệ với thông báo sau:

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

Nội Ngoại lệ:

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

Can Chúng tôi không trả lại các loại đối tượng hoặc các đối tượng tùy chỉnh từ dịch vụ WCF?

+0

nơi bạn lưu trữ dịch vụ wcf của mình? –

Trả lời

13

Bạn nên trả về một thể hiện của một lớp học mà được đánh dấu bằng các thuộc tính DataContract:

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

Bây giờ thay đổi giao diện dịch vụ của bạn như vậy:

[OperationContract]  
MyClass GetMyClass(); 

Và dịch vụ của bạn:

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

Bạn nên trả về một loại cụ thể, không phải "đối tượng". Một "đối tượng" có thể thuộc bất kỳ loại nào.

+0

trong khi tôi đồng ý rằng đây là thiết kế kém, tôi cảm thấy rằng WCF sẽ có thể xử lý đối tượng – Steve

+2

"đối tượng" là một ký tự đại diện. Nó có nghĩa là bạn có thể trả lại bất cứ điều gì cả. Bạn sẽ cần phải nói với WCF về những thứ bạn có thể quay trở lại, bằng cách sử dụng 'ServiceKnownTypeAttribute'. –

0

Đối tượng tùy chỉnh là tốt, trong khi MS cho biết bạn không phải sử dụng thuộc tính [DataContract] hoặc [datamember] nữa, tôi đã không thành công nếu không có chúng. Hãy thử đánh dấu đối tượng tùy chỉnh của bạn với các thuộc tính và xem điều gì đang diễn ra. Bạn có thể nhận thêm thông tin về những gì đang diễn ra một cách rõ ràng bằng cách bật truy tìm và sử dụng svcutil để lấy dấu vết.

Các vấn đề liên quan