2011-12-19 14 views
14

私が構築したWCFサービスをテストするためにWCFテストクライアントを使用しようとしています。タイプを使用しているため、WCFテストクライアントでWCFサービスメソッドを使用できません。

サービスには、「SubmitRequest」という1つのメソッドがあります。

[OperationContract] 
Response SubmitRequest(Request request); 

私はWCFテストクライアントをロードすると、それはWcfLibrary.Objects.Request

以下

さを入力使用しているため、この方法は、「この操作は、WCFテストクライアントでサポートされていないメッセージでグレー表示されています型定義、誰もが何か?/答えワット

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

感謝。

EDITを見るん...
MspWebCallType型がHashtable型のプロパティを持っていたため、WCFテストクライアント経由で操作を使用できませんでした。このプロパティを削除すると、問題が修正されました。誰もが助けてくれてありがとう。

+0

WSDLは「要求」クラスのXSDを参照していますか? –

+0

あなたは試しましたか?[OperationContract] [KnownType(typeof(Request))] レスポンスSubmitRequest(リクエストリクエスト); – kd7

+0

質問:リクエストクラスは実際にはWcfLibrary.Objectsという名前空間内にありますか? –

答えて

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属性はありません。リクエストタイプからこれらの2つのプロパティを削除しても、同じ問題が発生します。ありがとう。 – thiag0

+0

@ igby-largeman深いリストのおかげで、また、 "タイプ"のタイプはサポートされていないようです。チャンスがあれば、あなたのリストに追加してください。 – Gent

+0

このリンクのなかで[ストリーミングを有効にする]方法を説明しています(http://msdn.microsoft.com/en-us/library/ms789010.aspx) –

0

Requestにはパブリックのノンパラメトリックコンストラクタが必要なことが原因です。これは、このエラーのため、現在Googleで最初の結果であるよう

+0

パラメータのないコンストラクタを追加しようとしましたが、問題は解決しませんでした。 – thiag0

+0

さて、WCFテストクライアントは、あなたのサービス定義を大いにサポートしていませんか?それは、比較的簡単なサービスインターフェイスでのみ動作します。私は通常、私のサービスをテストするためにSoapUIを使用します。 –

+0

また、WCF Stormは素晴らしいです。 –

0

はここに答える:@Igby Largemanの答えに加えて

どこかの操作やデータの契約であれば、あなたも、このエラーが表示されます、あなたが持っていますシリアライズ可能でない型を使用していました。

.NETでのExceptionクラスの例を見てみましょう...

私は私のチームの開発者がプットではなく、DTOを介してサービスのクライアントに例外オブジェクトを送り返すことを選択したことにより、ケースを持っていた

例外メッセージをDTOに手動で入力します。 Visual Studioはビルド時に警告を表示しません(実際にはそうすべきです)。クラスはシリアライズ可能ではなく、実行時にのみ失敗します。

このエラーが表示され、上記の回答が否定された場合は、契約書およびDTOで使用されているタイプを確認してください。シリアル化できないものがあなたの犯人になる可能性があります。

これは誰かが時間を節約することを望みます。

0

私は同じエラーがありました。問題は、クラスにSystem.Drawing.Imageプロパティがあることでした。私はクラスから削除し、それは働いた。バイト配列をbase64文字列に変換します。

関連する問題