2012-04-24 10 views
8

私はVisual StudioでWCFを使用してWebサービスを作成しました。生成されたWSDLを見ると、多くの型指定を含むhttp://schemas.microsoft.com/2003/10/Serializationへの参照が含まれています。私はこれらの仕様を使用していません。 WCFがこれを追加する理由は誰にも分かりますが、それを取り除く方法があれば教えてください。WCFが使用しないスキーマを削除または除外する方法はありますか?

XMLは私のWSDLに追加私のサービスにsingleWsdl引数を使用した場合、次のようになります

<xs:schema xmlns:tns="http://schemas.microsoft.com/2003/10/Serialization/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="anyType" nillable="true" type="xs:anyType" /> 
    <xs:element name="anyURI" nillable="true" type="xs:anyURI" /> 
    <xs:element name="base64Binary" nillable="true" type="xs:base64Binary" /> 
    <xs:element name="boolean" nillable="true" type="xs:boolean" /> 
    <xs:element name="byte" nillable="true" type="xs:byte" /> 
    <xs:element name="dateTime" nillable="true" type="xs:dateTime" /> 
    <xs:element name="decimal" nillable="true" type="xs:decimal" /> 
    <xs:element name="double" nillable="true" type="xs:double" /> 
    <xs:element name="float" nillable="true" type="xs:float" /> 
    <xs:element name="int" nillable="true" type="xs:int" /> 
    <xs:element name="long" nillable="true" type="xs:long" /> 
    <xs:element name="QName" nillable="true" type="xs:QName" /> 
    <xs:element name="short" nillable="true" type="xs:short" /> 
    <xs:element name="string" nillable="true" type="xs:string" /> 
    <xs:element name="unsignedByte" nillable="true" type="xs:unsignedByte" /> 
    <xs:element name="unsignedInt" nillable="true" type="xs:unsignedInt" /> 
    <xs:element name="unsignedLong" nillable="true" type="xs:unsignedLong" /> 
    <xs:element name="unsignedShort" nillable="true" type="xs:unsignedShort" /> 
    <xs:element name="char" nillable="true" type="tns:char" /> 
    <xs:simpleType name="char"> 
    <xs:restriction base="xs:int" /> 
    </xs:simpleType> 
    <xs:element name="duration" nillable="true" type="tns:duration" /> 
    <xs:simpleType name="duration"> 
    <xs:restriction base="xs:duration"> 
     <xs:pattern value="\-?P(\d*D)?(T(\d*H)?(\d*M)?(\d*(\.\d*)?S)?)?" /> 
     <xs:minInclusive value="-P10675199DT2H48M5.4775808S" /> 
     <xs:maxInclusive value="P10675199DT2H48M5.4775807S" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:element name="guid" nillable="true" type="tns:guid" /> 
    <xs:simpleType name="guid"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}" /> 
    </xs:restriction> 
    </xs:simpleType> 
    <xs:attribute name="FactoryType" type="xs:QName" /> 
    <xs:attribute name="Id" type="xs:ID" /> 
    <xs:attribute name="Ref" type="xs:IDREF" /> 
</xs:schema> 

答えて

0

私はそれを削除する必要はないことに同意します。また何回も使用されており、あなたはそれについて知りません。デフォルトのWSDLのGENERATIOを変更する方法はIWsdlExportExtensionを実装することである:

http://msdn.microsoft.com/en-us/library/system.servicemodel.description.iwsdlexportextension.aspx

+0

私はそれを削除する必要はないかもしれないことに部分的に同意しますが、なぜそれをすべて含めるのですか? IWsdlExportExtensionは他のスキーマを使用していない場合には削除する方法だと思っていましたが、より良い解決策を望んでいました。 :) – Markus

0

MicrosoftのWSDLインプリメンテーション・輸入のためのXSD定義この名前空間(hereを参照してください)。

なぜそれを削除しますか?

+0

wsdlではスキーマで指定された型は使用されていません(少なくとも何も見つかりません)。使用されていない情報を含める必要はないようです。 – Markus

1

多分それは今では遅すぎるのですが、私はこの問題に遭遇し、それを解決することができました。私がそれを削除した理由は、JavaとRPGの両方でクライアントを生成していたためで、wsdl2javawsdl2rpgツールは、そのスキーマに基づいて大規模で醜いデータ構造を生成します。

私の場合は、DataContractシリアライザを使用していたため、シリアライズしていたオブジェクトの一部に[DataContract]属性のないメンバーがありました。その余分なスキーマを廃止するには、すべてがシリアライズされています。

サービス契約に継承されたパブリックメンバーが存在する場合は、この問題も発生しました。

+0

常に私のものを良くすることに興味があります。 :) クラスとインターフェイスをチェックし、すべてのクラスに[DataContract]があり、すべてのクラスメンバーに[DataMember]があることがわかりました。非常にシンプルな契約なので、継承はありません。 – Markus

+1

私はintのような "奇妙な"タイプを使用していますか?と契約のIEnumerable ? – Markus

+0

おそらく、私たちはジェネリック型を持っていなかったので、あなたの問題かもしれません。 –

関連する問題