2011-12-19 38 views
14

Tôi đang cố gắng sử dụng WCF Test Client để kiểm tra dịch vụ WCF mà tôi đã xây dựng.Phương pháp dịch vụ WCF không có trong WCF Test Client vì nó sử dụng loại

Dịch vụ có một phương thức "SubmitRequest".

[OperationContract] 
Response SubmitRequest(Request request); 

Khi tôi tải lên Test Khách hàng WCF, phương pháp này được chuyển sang màu xám với thông điệp "Thao tác này không được hỗ trợ trong Client WCF thử nghiệm vì nó sử dụng loại WcfLibrary.Objects.Request

Dưới đây là các định nghĩa kiểu, không ai nhìn thấy bất cứ điều gì sai?

[DataContract] 
public class Request 
{ 
    [DataMember] 
    public string LoanNumber { get; set; } 

    [DataMember] 
    public string ClientCode { get; set; } 

    [DataMember] 
    public Region Region { get; set; } 

    [DataMember] 
    public RequestType RequestType { get; set; } 

    [DataMember] 
    public List<RequestParameter> RequestParameters { get; set; } 

    [DataMember] 
    public List<MspWebCallType> MspWebCallsForXmlRequest { get; set; } 

    [DataMember] 
    public Hashtable XmlRequestParameters { get; set; } 

    public Request(string loanNumber, string clientCode, Region region, RequestType requestType, List<RequestParameter> requestParameters) 
    { 
     LoanNumber = loanNumber; 
     ClientCode = clientCode; 
     Region = region; 
     RequestType = requestType; 
     RequestParameters = requestParameters; 
    } 
} 

[DataContract] 
public class MspWebCallType 
{ 
    [DataMember] 
    public string WebService { get; set; } 
    [DataMember] 
    public string Operation { get; set; } 
    [DataMember] 
    public string Version { get; set; } 
    [DataMember] 
    public Hashtable Parameters { get; set; } 
    [DataMember] 
    public Msp.FavReadViews FAVReadViewIndicator { get; set; } 
    [DataMember] 
    public Msp.DsReadIndicators DSReadInidicator { get; set; }   
} 

[DataContract] 
public enum Region 
{ 
     [EnumMember] 
     P2, 
     [EnumMember] 
     PROD 
} 

[DataContract] 
public enum RequestType 
{ 
    [EnumMember] 
    None, 
    [EnumMember] 
    XmlRequest, 
    [EnumMember] 
    SomeOtherRequestType 
} 

[DataContract] 
public struct RequestParameter 
{ 
    [DataMember] 
    public string ParameterName { get; set; } 

    [DataMember] 
    public string ParameterValue { get; set; } 
} 

Cảm ơn.

EDIT w/câu trả lời ...
các hoạt động không có sẵn thông qua WCF Test Client vì kiểu MspWebCallType có thuộc tính kiểu Hashtable. Khi tôi đã xóa thuộc tính này, nó đã khắc phục sự cố. Cảm ơn sự giúp đỡ của mọi người.

+0

WSDL có tham chiếu XSD cho lớp 'Yêu cầu' không? –

+0

Bạn đã thử: [OperationContract] [KnownType (typeof (Yêu cầu))] Response SubmitRequest (Yêu cầu yêu cầu); – kd7

+0

Câu hỏi: Lớp Yêu cầu của bạn có thực sự nằm trong không gian tên WcfLibrary.Objects không? –

Trả lời

26

The following is a list of features not supported by WCF Test Client:

  • Types: Stream, Message, XmlElement, XmlAttribute, XmlNode, types that implement the IXmlSerializable interface, including the related XmlSchemaProviderAttribute attribute, and the XDocument and XElement types and the ADO.NET DataTable type.

  • Duplex contract.

  • Transaction.

  • Security: CardSpace , Certificate, and Username/Password.

  • Bindings: WSFederationbinding, any Context bindings and Https binding, WebHttpbinding (Json response message support).

Nguồn: MSDN

Kiểm tra Msp.FavReadViewsMsp.DsReadIndicators để đảm bảo họ tuân thủ.

+0

Msp.FavReadViews và Msp.DsReadIndicators được định nghĩa bên trong một dự án thư viện lớp tham chiếu. Chúng là những enums đơn giản nhưng không có các thuộc tính EnumMember. Tôi đã xóa 2 thuộc tính này khỏi loại Yêu cầu và vẫn gặp sự cố tương tự. Cảm ơn. – thiag0

+0

@ igby-largeman cảm ơn cho danh sách chiều sâu, cũng có vẻ như là loại "Loại" không được hỗ trợ. Nếu bạn có cơ hội, hãy thêm nó vào danh sách của bạn. – Gent

+0

Tại sao trong liên kết này giải thích cách [Bật Streaming] (http://msdn.microsoft.com/en-us/library/ms789010.aspx) –

0

Có thể là do Request cần có một hàm tạo công khai không tham số.

+0

Tôi đã thử thêm một hàm tạo parameterless nhưng điều đó không giải quyết được vấn đề. – thiag0

+0

Vâng, WCF Test Client có hỗ trợ định nghĩa dịch vụ của bạn không? Nó hoạt động cho các giao diện dịch vụ tương đối đơn giản chỉ .. Tôi thường sử dụng SoapUI để thử nghiệm các dịch vụ của mình. –

+0

Ngoài ra, WCF Storm là tuyệt vời. –

0

trả lời ở đây vì đây là kết quả đầu tiên trên Google hiện cho lỗi này:

Ngoài câu trả lời @Igby Largeman 's, bạn cũng sẽ nhận được lỗi này nếu ở đâu đó trong hợp đồng hoạt động hoặc dữ liệu của bạn, bạn có đã sử dụng loại không thể tuần tự hóa được.

Lấy một ví dụ của lớp Exception trong .NET ...

Tôi đã có một trường hợp trong đó một nhà phát triển trong nhóm của tôi đã chọn để gửi lại các đối tượng ngoại lệ cho khách hàng của dịch vụ thông qua một DTO, chứ không phải là đặt thông báo ngoại lệ vào DTO theo cách thủ công. Visual Studio sẽ không cảnh báo bạn tại thời gian xây dựng (nó nên, thực sự), rằng lớp không phải là serializable, nó sẽ chỉ thất bại trong thời gian chạy.

Vì vậy, nếu bạn nhận được lỗi này và đã loại trừ câu trả lời ở trên, hãy đảm bảo bạn kiểm tra các loại được sử dụng trong hợp đồng và DTO của bạn; một cái gì đó không được serializable có thể là thủ phạm của bạn.

Tôi hy vọng điều này sẽ giúp bạn tiết kiệm thời gian.

0

Tôi đã gặp lỗi tương tự và vấn đề là lớp có thuộc tính System.Drawing.Image. Tôi xóa nó khỏi lớp và nó hoạt động. Tôi chuyển đổi mảng byte thành chuỗi base64.

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