15

WCFサービスを作成しましたが、サービスのWSDLにクラス(複合型)が表示されません。

以下はサービスです:

[ServiceContract]
public interface IFedexService
{
    [OperationContract]
    ShipmentReply CreateMultiFedExShipment(RxRdShipment shipment);

    [OperationContract]
    ShipmentReply CreateFedExShipment(RxRdShipment shipment);
}

そして私のクラス定義は:

[DataContract]
public class ShipmentReply
{
    [DataMember]
    public string ReferenceNumber { get; set; }

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

    [DataMember]
    public List<ReplyPackage> Packages { get; set; }

    [DataMember]
    public bool Response { get; set; }

    [DataMember]
    public RxNotification Notification { get; set; }
}

ShipmentReply私の問題は、このクラスがで見つからなかったことWSDLです。私の問題は何ですか?

ありがとう、アレフィン

4

1 に答える 1

32

はい、それはWCFでは正常です。デフォルトでは、WCFはWSDL自体の操作のみを表示します。データ構造は、WSDLファイルにリンクされているXSDファイルに文書化されています。

WSDLを見ると、WSDLのほぼ上部にこれに似たものが表示されると思います。

<xsd:schema targetNamespace="http://tempuri.org/Imports">
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd0" 
              namespace="http://tempuri.org/" /> 
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd1"  
              namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> 
  <xsd:import schemaLocation="http://localhost:8000/HelloIndigo?xsd=xsd2" 
              namespace="http://schemas.datacontract.org/2004/07/WCF_Simple_Service" /> 
</xsd:schema>

これらは必要なXSDファイルへのリンクです-ブラウザにURLを入力すると、そのうちの1つ(おそらく最も大きい番号のものですが、その1つである必要はありません)に複雑な型の定義が含まれます。

ブラウザでこのURLを試してください(ポートと実際のURLをお持ちのものに適合させてください)。

http://localhost:8080/HelloIndigo?xsd=xsd2

これにより、複雑なタイプのXSDが得られるはずです

この機能により、過去数年間にいくつかの問題が発生しました。一部のクライアントは、この(100%正確で完全に正常な)構文を処理できません。したがって、.NET 4.5では、WCFに新しいパラメーター(...?singlewsdl)が追加され、すべてのXSD要素を含むWSDL全体が出力されます。「WCF4.5の新機能」を参照してください。詳細については、単一のWSDLファイルを参照してください。

于 2012-04-29T09:41:32.180 に答える