在WCF服務器端的兩個不同名稱空間中定義了自定義類型(例如Engine),該名稱空間作爲Engine,Engine1公開給WCF客戶端。如何設置,以便暴露的類型具有相同的名稱,在這種情況下引擎。如何避免在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 { }
}
下面是引擎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 {
}
請注意,這兩個摩托車和TwoDoorCar含有大量的自定義類型的具有相同名字但功能不同。因此,在客戶端更改名稱非常繁瑣(例如,將Engine1更改爲所有發生的引擎)。使用類繼承來解決它也很繁瑣。可以定義兩個具有相同名稱的自定義類型,這可能需要較少的工作。
任何想法將非常感激!
編輯 * 可能的解決方案 *
把它放進單獨的界面,如下圖
[ServiceContract]
interface ICar1
{
[OperationContract]
void RepairMotorCycle(MotorCycle motorCycle);
}
[ServiceContract]
interface ICar2
{
[OperationContract]
void RepairTwoDoorCar(TwoDoorCar Car);
}
這將會把相同的自定義類型在不同的命名空間的客戶端。
slugster,謝謝。由於課程數量衆多,這個選項可能是最後的解決方案 – Pingpong
@slugster修復因嚴重需要在客戶端修改生成的代碼而需要重構的設計導致的問題,這對我來說似乎非常危險。 – Filburt