사용자 유형 (예 : 엔진)은 WCF 서버 측의 서로 다른 두 개의 네임 스페이스에 정의되어 있으며 Engine, Engine1로 WCF 클라이언트에 노출되어 있습니다. 노출 된 유형이 동일한 이름 (이 경우 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 모두 같은이 사용자 지정 형식의 큰 숫자를 포함하고 있습니다 :
다음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 { }
}
는 엔진의 WCF 클라이언트입니다 : 아래
내 예제 코드입니다 이름이지만 다른 기능. 따라서 클라이언트 측에서 이름을 변경하는 것은 지루합니다 (예 : 모든 발생에 대해 Engine1을 Engine으로 변경). 또한 클래스 상속을 사용하여 문제를 해결하는 것이 지루합니다. 이름이 같은 두 개의 사용자 정의 유형을 정의하면 작업이 덜 필요할 수도 있습니다.어떤 아이디어라도 대단히 감사하겠습니다.
[ServiceContract]
interface ICar1
{
[OperationContract]
void RepairMotorCycle(MotorCycle motorCycle);
}
[ServiceContract]
interface ICar2
{
[OperationContract]
void RepairTwoDoorCar(TwoDoorCar Car);
}
이 아래로 *
별도의 인터페이스에 넣어
편집 * 가능한 해결 방법은 클라이언트 측에서 다른 네임 스페이스에서 같은 사용자 정의 유형을 넣어 것입니다.
slugster, thanks. 감사합니다. 많은 수의 클래스로 인해이 옵션은 최후의 수단이 될 수 있습니다. – Pingpong
@slugster 클라이언트 측에서 생성 된 코드를 수정하여 리팩토링이 필요한 디자인으로 인한 문제를 해결하는 것은 매우 위험한 것 같습니다. – Filburt