0

リクエストとして使用する次の MessageContracts があります。

<MessageContract(WrapperName:="get")> _
Public Class GetRequest
    Inherits BaseAuthenticatedRequest

    Protected _typeName As cEnum.eType
    Protected _id As Integer

    <MessageBodyMember()> _
    Public Property TypeName() As cEnum.eType
    ...

    <MessageBodyMember()> _
    Public Property Id() As Integer
    ...
End Class

<MessageContract(WrapperName:="getLimited")> _
Public Class GetLimitedRequest
    Inherits GetRequest

    Protected _propertyList As List(Of String)

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _
    Public Property PropertyList() As List(Of String)
    ...
End Class

ただし、SoapUI でテストする場合、getLimited リクエストの本文は次のように作成されます。

  <v2:getLimited>
     <!--Optional:-->
     <v2:Id>?</v2:Id>
     <!--Optional:-->
     <v2:PropertyList>
        <!--Zero or more repetitions:-->
        <arr:string>?</arr:string>
     </v2:PropertyList>
     <!--Optional:-->
     <v2:TypeName>?</v2:TypeName>
  </v2:getLimited>

どこでv2= Api2Information.Namespace. 私が本当に望んでいるのは、PropertyList に含まれる文字列がv2ではなくとして名前空間化されることarrです。とにかく私がそれを達成することはありますか?WCF を使用するように ASMX サービスを変換していますが、再コンパイルして再配布する余裕がないアプリケーションがいくつかあります。

助けてくれてありがとう!

4

1 に答える 1

0

探していたものが見つかりました。次のようなカスタム コレクション タイプを使用します。

<CollectionDataContract(Namespace:=Api2Information.Namespace)> _
Public Class PropertyList : Inherits List(Of String)

End Class

そして、私の契約でそれの出現を次のように置き換えます:

<MessageContract(WrapperName:="getLimited")> _
Public Class GetLimitedRequest
    Inherits GetRequest

    Protected _propertyList As PropertyList

    <MessageBodyMember(Namespace:=Api2Information.Namespace)> _
    Public Property PropertyList() As PropertyList
    ...
End Class

出力を生成します。

  <v2:getLimited>
     <!--Optional:-->
     <v2:Id>?</v2:Id>
     <!--Optional:-->
     <v2:PropertyList>
        <!--Zero or more repetitions:-->
        <v2:string>?</v2:string>
     </v2:PropertyList>
     <!--Optional:-->
     <v2:TypeName>?</v2:TypeName>
  </v2:getLimited>
于 2010-10-29T16:00:59.590 に答える