2011-12-21 13 views
0

公開したいWCFサービスメソッドがあります。同じタイプ名、同じXSD名前空間を持つWCFサービスタイプ

サービスメソッドのパラメータタイプは、同じクラス名とXML名前空間を持つすべてのタイプの基本クラスです。

すべての派生型は異なるC#名前空間にありますが、同じxml名前空間で公開する必要があります。以下は実装です。

ただし、重複する図形タイプを示すサービス参照を追加しようとしたときにエラーが発生しました。

理想的には、Visual Studioは2番目の図形(例:Set1.Shape、Set2.Shape)のC#名前空間を自動的に割り当てる必要があります。したがって、すべてのタイプをダウンロードできます。

何か考えていただければ幸いです。

[ServiceContract] 
public interface IShape 
{ 
    [OperationContract] 
    [ServiceKnownType(typeof(Set1.Shape))] 
    [ServiceKnownType(typeof(Set2.Shape))] 
    void GetShape(ShapeBase shape); 
} 

public class ShapeBase : IShape { } 

//Example only. 
namespace Set1 
{ 
    public class Shape : ShapeBase { } 
} 

namespace Set2 
{ 
    public class Shape : ShapeBase { } 
} 

更新

WSDLはプログラミングで名前空間をサポートしていないので、私は1つは、それがクライアント側で同じことを行うことができない理由を考えさせるれ、WCFサービス側でそれらを公開することができる午前、ありますC#のような言語。

答えて

0

各タイプには、XML名前空間とXML名の固有の組み合わせが必要です。したがって、型が同じXML名前空間になければならない場合は、異なる要素名を持つ必要があります。 CLRの型名が同じであるため、現在はほとんどありません。

+0

CLRの型名は同じですが、名前空間が異なります。 WSDLはC#の名前空間をサポートしていないか、wcfクライアントに別の名前空間を割り当てるタイミングに関する情報がないためかもしれません。 – Pingpong

+0

デフォルトでは、CLR名前空間はXML名前空間を作成するために使用されますが、オプションではないと言われているクラスごとにXML名前空間が異なります。 XML名前空間を再定義すると、CLR名前空間は使用されなくなります。 –

0

Ladislavによると、同じXML名前空間内に異なるノード名を持つ必要があります。これは、DataContractAttributeのNameプロパティを使用して識別できます。

namespace Set1 
{ 
    [DataContract(Name="Set1Shape")] 
    public class Shape : ShapeBase { } 
} 

namespace Set2 
{ 
    [DataContract(Name="Set2Shape")] 
    public class Shape : ShapeBase { } 
} 
+0

私はそれを知っていました。公開された同じ型名と同じxml名前空間を持つ必要があります。あなたのアドバイスには、公開されているタイプ名が異なります。 – Pingpong

+1

@ピンポン:その要件は達成できません。逆シリアル化は、使用する型を知らないでしょう。 –

+0

XML Webサービス境界を越えて型を公開する唯一の方法は、型のルートノード名と組み合わせたXML名前空間によるものです。これはあなたが公開しているタイプを定義します*。あなたがしたいことは論理的ではありません。タイプが同じでないことを示すことはできません。したがって、エラーメッセージが表示されます。 –

関連する問題