2011-12-19 27 views
14

我正在嘗試使用WCF測試客戶端來測試已構建的WCF服務。WCF服務方法在WCF測試客戶端中不可用,因爲它使用類型

該服務有一個方法「SubmitRequest」。

[OperationContract] 
Response SubmitRequest(Request request); 

當我加載了WCF測試客戶端,方法是灰色的消息「該操作未在WCF測試客戶端支持,因爲它使用類型WcfLibrary.Objects.Request

下面是類型定義,沒有人看到什麼不對?

[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; } 
} 

感謝。

編輯瓦特/答案...
的操作不可通過WCF測試客戶端,因爲類型MspWebCallType具有Hashtable類型的屬性。一旦我刪除這個屬性,它解決了這個問題。感謝大家的幫助。

+0

WSDL是否爲'Request'類引用了XSD? – 2011-12-19 21:43:29

+0

您是否嘗試過:[OperationContract] [KnownType(typeof(Request))] Response SubmitRequest(Request request); – kd7 2011-12-19 21:51:34

+0

問題:請求類實際上是在名稱空間WcfLibrary.Objects中嗎? – 2011-12-19 21:52:58

回答

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).

來源:MSDN

檢查Msp.FavReadViewsMsp.DsReadIndicators,以確保他們遵守。

+0

Msp.FavReadViews和Msp.DsReadIndicators在引用的類庫項目中定義。它們是簡單的枚舉,但沒有EnumMember屬性。我從請求類型中刪除了這兩個屬性,但仍然遇到同樣的問題。謝謝。 – thiag0 2011-12-19 22:02:13

+0

@ igby-largeman感謝深入列表,也似乎不支持「類型」的類型。如果您有機會,請將其添加到您的列表中。 – Gent 2014-01-22 14:29:12

+0

爲什麼在這個鏈接解釋如何[啓用流式傳輸](http://msdn.microsoft.com/en-us/library/ms789010.aspx) – 2014-02-10 08:31:07

0

這可能是因爲Request需要一個公共的非參數構造函數。

+0

我試圖添加一個無參數的構造函數,但沒有解決問題。 – thiag0 2011-12-20 18:02:37

+0

那麼,WCF測試客戶端不支持你的服務定義對你來說是一件大事嗎?它只適用於相對簡單的服務接口..我通常使用SoapUI來測試我的服務。 – 2011-12-20 18:05:40

+0

另外,WCF Storm很棒。 – 2011-12-20 18:07:50

0

這裏回答,因爲這是在谷歌的第一個結果目前此錯誤:

除了@Igby Largeman的回答,您也會收到此錯誤,如果在某處您的操作或數據的合同,你有使用了一個不可序列化的類型。

採取.NET Exception類的一個實例...

我藉此對我的團隊的開發人員均選擇通過DTO發回的例外對象服務的客戶,而不是把情況手動將異常消息放入DTO。 Visual Studio不會在構建時警告你(它應該,真的),該類不是可序列化的,它只會在運行時失敗。

因此,如果您收到此錯誤並已排除上述答案,請確保檢查您的合同和DTO中使用的類型;不可序列化的東西可能是你的罪魁禍首。

我希望這可以節省一些人的時間。

0

我有相同的錯誤,問題是該類有一個System.Drawing.Image屬性。我從課堂上刪除它,它工作。我將字節數組轉換爲base64字符串。

相關問題