Sự cố với "Thêm tham chiếu dịch vụ" và thực sự với SvcUtil trên tất cả các tính năng của nó. Để tái tạo bạn chỉ cần thêm một OperationContract với lập luận hoặc trả lại lớp sau đây:WCF AddServiceReference gây lỗi công cụ tùy chỉnh, không tạo proxy
[XmlSchemaProvider("MySchema")]
public class MyStructure : IXmlSerializable
{
private XmlElement e;
private static void Func(object o, ValidationEventArgs args)
{
}
public static XmlQualifiedName MySchema(XmlSchemaSet xs)
{
//xs.XmlResolver = new XmlUrlResolver();
XmlSchema s = XmlSchema.Read(new XmlTextReader(new StringReader("<?xml version=\"1.0\"?><xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"><xs:complexType name=\"MyStructure\"><xs:sequence><xs:any /></xs:sequence></xs:complexType></xs:schema>")), null);
xs.Add(s);
return new XmlQualifiedName("MyStructure");
}
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
throw new NotImplementedException();
}
public void ReadXml(XmlReader reader)
{
XmlDocument doc = new XmlDocument();
e = (XmlElement)doc.ReadNode(reader);
}
public void WriteXml(XmlWriter writer)
{
e.WriteTo(writer);
}
#endregion
}
Kết quả là khi bạn sử dụng AddWebReference hoặc AddSerivceReference mà không có một tham chiếu đến thư viện lớp có chứa các loại MyStructure, tất cả mọi thứ sẽ là quảng cáo tốt, bạn sẽ nhận được một đại diện xmlElement tại proxy được tạo tự động.
Tuy nhiên, khi bạn có một tài liệu tham khảo bạn sẽ nhận được cảnh báo sau đây:
================
Cảnh báo cảnh báo công cụ 1 tùy chỉnh: Không thể nhập khẩu wsdl: portType Chi tiết: Một ngoại lệ được ném trong khi chạy phần mở rộng nhập WSDL: System.ServiceModel.Description.DataContractSerializerMessageContractImporter Lỗi: Loại tham chiếu 'ServiceLibrary.MyStructure, ServiceLibrary, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' với tên hợp đồng dữ liệu 'MyStructure' trong không gian tên '' không thể được sử dụng vì nó không khớp với DataContract đã nhập. Cần loại trừ loại này khỏi các loại được tham chiếu. XPath đến lỗi Nguồn: // wsdl: định nghĩa [@ targetNamespace = 'http://tempuri.org/']/wsdl: portType [@ name = 'IService1'] \ Projects \ WCFSample \ WCFExample \ TestAddReference \ Dịch vụ Tài liệu tham khảo \ ServiceReference1 \ Reference.svcmap 1 1 TestAddReference
======================
Và không có proxy nào được tạo cho bạn.
Bây giờ, Internet đầy với các mô tả về điều này khi bạn có một DataContract chung và/hoặc sử dụng thuộc tính IsReference.
Đây là một vấn đề nghiêm trọng, vì mọi dữ liệu không được nhập sẽ làm vấn đề này. Không thể tìm thấy bất kỳ cách nào để giải quyết vấn đề. Nếu tôi muốn biết loại ở phía khách hàng, bằng cách chia sẻ thư viện lớp của các hợp đồng?
Tôi ước tôi biết câu trả lời cho điều này. Tôi đang chiến đấu với một vấn đề gần như giống hệt với VS2010 ngay bây giờ. Theo kinh nghiệm của tôi, WCF đã không ổn định và không đáng tin cậy trong nhiều năm khi nói đến việc tạo ra WSDL thích hợp cho tiêu thụ trong svcutil.exe, và nó khá đáng thất vọng vì nó chưa được sửa trong VS2010. Không ai ở Microsoft thực sự sử dụng công nghệ này? Bởi vì tôi không thể thiết lập một dịch vụ WCF mà không chạy vào này hoặc một số vấn đề liên quan chặt chẽ khác. –
MICROSOFT XIN VUI LÒNG THỰC HIỆN NÀY !!! (hoặc tôi đi Java) – capdragon