カスタムタイプ(エンジンなど)は、Engine1としてWCFクライアントに公開されているWCFサーバー側の2つの異なる名前空間で定義されています。公開されているタイプの名前が同じになるように設定するには、この場合Engineを選択します。以下は回避方法WCFクライアントで生成されたカスタムタイプ名のクラッシュ
私のコード例である:以下
namespace WcfServiceLibrary1
{
[ServiceContract]
interface ICar
{
[OperationContract]
void RepairMotorCycle(MotorCycle motorCycle);
[OperationContract]
void RepairTwoDoorCar(TwoDoorCar Car);
}
public class Car:ICar
{
public void RepairMotorCycle(MotorCycle motorCycle)
{
throw new NotImplementedException();
}
public void RepairTwoDoorCar(TwoDoorCar Car)
{
throw new NotImplementedException();
}
}
}
namespace WcfServiceLibrary1.MC
{
public class MotorCycle
{
public Engine Engine { get; set; }
}
public class Engine { }
}
namespace WcfServiceLibrary1.C
{
public class TwoDoorCar
{
public Engine Engine { get; set; }
}
public class Engine { }
}
Engine用のWCFクライアントです:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Engine", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1.MC")]
[System.SerializableAttribute()]
public partial class Engine : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Engine", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1.C")]
[System.SerializableAttribute()]
public partial class Engine1 : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
}
はMOTOCYCLEとTwoDoorCarの両方が同じを持つカスタムタイプが多数含まれていることに注意してください名前は異なるが機能は異なる。したがって、クライアント側で名前を変更するのは面倒です(たとえば、すべての発生時にEngine1をEngineに変更するなど)。また、クラスの継承を使用して解決するのは面倒です。同じ名前の2つのカスタムタイプを定義しても問題ありません。
どのようなアイデアをいただければ幸いです。
[ServiceContract]
interface ICar1
{
[OperationContract]
void RepairMotorCycle(MotorCycle motorCycle);
}
[ServiceContract]
interface ICar2
{
[OperationContract]
void RepairTwoDoorCar(TwoDoorCar Car);
}
これ以下のように *
は別のインタフェースにそれを入れて
編集 * 可能な解決策は、クライアント側で異なる名前空間で同じカスタムタイプを配置します。
slugster、ありがとう。クラスの数が多いため、このオプションが最後の手段になる可能性があります。 – Pingpong
@slugsterクライアント側で生成されたコードを変更してリファクタリングを真剣に必要とする設計から生じる問題を修正することは非常に危険です。 – Filburt