Tôi muốn có một chức năng trên dịch vụ WCF với kiểu trả về như giao diện, nhưng khi tôi gọi nó từ máy khách, tôi nhận được System.Object
, không phải lớp thực hiện giao diện dịch vụ được gửi.Cách hiển thị giao diện trong dịch vụ web
Dưới đây là một số mẫu mã:
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
public interface IMyObject
{
int Add(int i, int j);
}
[DataContract]
public class MyObject : IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Trong việc thực hiện dịch vụ này, tôi có:
public class LinqService : IService
{
public string SayHello()
{
return "Hello";
}
public IMyObject GetMyObject()
{
return new MyObject();
}
}
SayHello()
hoạt động tốt, nhưng GetMyObject()
trả về một System.Object
. Làm cách nào để thay đổi mã này để GetMyObject()
trả về một đối tượng triển khai IMyObject
?
Sửa 1
Thay đổi mã như sau:
using System.Runtime.Serialization;
using System.ServiceModel;
[ServiceContract]
public interface IService
{
[OperationContract]
string SayHello();
[OperationContract]
IMyObject GetMyObject();
}
[ServiceKnownType(typeof(MyObject))]
public interface IMyObject
{
[OperationContract]
int Add(int i, int j);
}
[DataContract]
public class MyObject:IMyObject
{
public int Add(int i, int j)
{
return i + j;
}
}
Nhưng không thành công!
Tôi có thể hỏi mục đích trả lại giao diện từ phương pháp WCF của bạn không? – CSharpenter
Cũng giống như vậy bạn có thể trả lại i nterface từ một phương thức: Ẩn thực hiện từ người dùng wcf. tại sao người dùng wcf của tôi nên biết về bất kỳ lớp nào mà tôi đã triển khai cho một giao diện? Người dùng chỉ cần biết những thuộc tính hoặc phương thức mà một đối tượng đang thực hiện. Trong ví dụ của tôi, tôi có thể trả về hàm IMyObject khác nhau dựa trên một số tham số. – mans
Nói chung, đó là một ý định tốt, nhưng khá vô nghĩa. Người gọi sẽ không thấy bất kỳ "triển khai" nào.Cũng có 'OperationContract' bên trong' DataContract' không được hỗ trợ. Hai khái niệm thực sự là riêng biệt. Bạn nên xem lại [Hợp đồng dịch vụ thiết kế] (http://msdn.microsoft.com/en-us/library/ms733070.aspx) trên MSDN để biết thêm thông tin. –