3

singleWSDL パラメータが適用された WCF サービスからエクスポートされた WSDL があります。

以下の型とメソッドのフラグメントのように、多くの qXX XML 名前空間が使用されています。

<xs:complexType name="PrincipalReference">
  <xs:complexContent mixed="false">
    <xs:extension base="q2:EntityReferenceBase">
      <xs:sequence/>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>


<xs:element name="GetPermissions">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" name="principal" nillable="true" type="q1:PrincipalReference"/>
      </xs:sequence>
  </xs:complexType>
</xs:element>

PrincipalReference クラスは EntityReferenceBase から継承されます。PrincipalReference と EntityReferenceBase はどちらも同じ C# 名前空間にあり、DataContractAttribute の Namespace フィールドの同じ値を持ちます。したがって、それらは必ず 1 つの名前空間にあります。

これらの q1 および q2 XML 名前空間をどうにかして取り除くことはできますか? Web サービスはさまざまな環境 (プラットフォーム/言語) から使用することを目的としているため、WSDL が明確であるほど嬉しいです。

たとえば、回避策として、継承の使用を停止し、基本クラスのコンテンツを派生コンテンツにコピーして、q2 の問題を解決できますが、メソッド パラメーターの型に適用される q1 名前空間をどうすればよいかわかりません。

4

2 に答える 2

2

私はあなたが次のことをする必要があると思います:-

サービスコントラクトとデータコントラクトに注釈を付けるときは、namespace属性を使用します。たとえば、このようなもの:-

[ServiceContract(Namespace = "http://some.url/2012/11")]

[DataContract(Namespace = "http://some.url/2012/11")]

また、エンドポイントを設定するときは、必ず次のbindingNameSpace属性を設定してください。-

<endpoint address=""
          binding="wsHttpBinding"
          bindingConfiguration="someBindingConfiguration" 
          bindingNamespace="http://some.url/2012/11"
          contract="Some.Contract" />
于 2012-11-27T17:13:05.923 に答える
1

私は同じ問題を抱えていました.奇妙なことは、最初にこれらのq1、q2、q3プレフィックスがなかったことです。私は DataContract シリアライザーを使用していますが、DataContract および DataMember 属性で必要なすべてをカバーできませんでした。その後、これらのプレフィックスはなくなりました。

また、シリアル化するものにも注意してください。TimeSpan 値を int に置き換える必要があったため、これが発生しなくなりました。

于 2016-06-10T13:39:32.233 に答える