Khi tôi gọi một phương thức của dịch vụ Xà phòng WCF của tôi, một lỗi được ném và một lỗi xuất hiện trong các tập tin svlog:Sự cố WCF với các loại?
Loại 'xxx.ActiveDirectoryService.classes.WCF.Message' bằng tên hợp đồng dữ liệu 'Message : http://schemas.datacontract.org/2004/07/xxx.ActiveDirectoryService.classes.WCF 'không được mong đợi. Hãy xem xét sử dụng một DataContractResolver hoặc thêm bất kỳ loại không được biết đến tĩnh danh sách các loại đã biết - ví dụ, bằng cách sử dụng thuộc tính KnownTypeAttribute hoặc bằng cách thêm chúng vào danh sách các loại đã biết được truyền cho DataContractSerializer.
Tôi đã cố gắng sử dụng KnownType tại đây và ở đó nhưng không thành công (Tôi phải thừa nhận rằng mình không chắc mình đã sử dụng 100% quyền).
Dưới đây là giao diện của tôi/classes:
[ServiceContract]
public interface IActiveDirectory
{
[OperationContract]
[WebGet]
void Dummy();
[OperationContract]
[WebGet]
AbstractMessage Dummy2();
[OperationContract]
[WebGet]
AbstractMessage Dummy3();
[OperationContract]
[WebGet]
AbstractMessage SetPassWord(string customer, string customerPassword, string userLogin, string userPassword);
}
[DataContract]
public abstract class AbstractMessage
{
[DataMember]
public virtual bool IsError { get; set; }
[DataMember]
public virtual string ErrorMessage { get; set; }
[DataMember]
public virtual string ReturnValue { get; set; }
}
public class Message : AbstractMessage
{
<...>
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
[KnownType(typeof(AbstractMessage))]
public class ActiveDirectory : IActiveDirectory
{
public void Dummy()
{
}
public AbstractMessage Dummy2()
{
return new AbstractMessage();
}
public AbstractMessage Dummy3()
{
return new Message();
}
public AbstractMessage SetPassWord(string customer, string customerPassword, string userLogin, string userPassword)
{
<...>
return message; // message is of type Message
}
}
Edit:12AM35 GMT+1
tôi thêm Dummy() phương pháp.
- Gọi giả từ khách hàng hoạt động tốt.
- Gọi Dummy2 từ máy khách hoạt động tốt.
- Gọi Dummy3 từ máy khách cũng gây ra lỗi tương tự.
Sửa12AM39 GMT+1
Làm các thay đổi sau không giúp đỡ.
[DataContract]
[KnownType(typeof(AbstractMessage))]
public class Message : AbstractMessage
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
[KnownType(typeof(AbstractMessage))]
[KnownType(typeof(Message))]
public class ActiveDirectory : IActiveDirectory
Edit:13AM31 GMT+1
Nếu tôi đặt Dummy3 kiểu trả về để nhắn, cuộc gọi đến Dummy3 trong công việc mã khách hàng.
Có điều gì đó kỳ quặc với WCF + Đa hình ...
[KnownType (typeof (Message))] hoạt động tốt nhưng tôi đã phải cập nhật tài liệu tham khảo của khách hàng (mà tôi đã không làm cho đến một vài phút trước). – Serge