![](/img/trans.png)
[英]How to share a property between multiple WCF services installed on a local machine?
[英]Share Types between WCF of Multiple Services
我有一個具有2個端點的Java Web服務器:SystemManagement和UserManagement。 2個端點使用相同的庫。 因此,這兩個端點中的幾乎所有類都是相同的。
我有一個使用這2個服務的C#客戶端。 我知道WCF可以共享課程。 因此,我創建了一個新項目,並讓我的客戶項目引用了該新項目。 然后在新項目中進行一個普通的類“會話”。
namespace WcfExplore.UserManagement
{
[DataContract]
public partial class session : object, System.ComponentModel.INotifyPropertyChanged
{
private string sessionIdField;
private string useridField;
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 3)]
[DataMember]
public string sessionId
{
get { return this.sessionIdField; }
set
{
this.sessionIdField = value;
this.RaisePropertyChanged("sessionId");
}
}
[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified, Order = 4)]
[DataMember]
public string userid
{
get { return this.useridField; }
set
{
this.useridField = value;
this.RaisePropertyChanged("userid");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if (propertyChanged != null)
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
但是,當我更新服務引用時,Visual Studio仍會自行生成類“會話”。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.225")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://iboss2.service.iasia.com/")]
public partial class session : object, System.ComponentModel.INotifyPropertyChanged {
private string sessionIdField;
private string useridField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
public string sessionId {
get {
return this.sessionIdField;
}
set {
this.sessionIdField = value;
this.RaisePropertyChanged("sessionId");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
public string userid {
get {
return this.useridField;
}
set {
this.useridField = value;
this.RaisePropertyChanged("userid");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
如何使2個服務引用使用公共類? 我不希望這2個服務引用生成自己的重復的類。
生成第二個服務引用時,可以嘗試從引用的程序集重用類型選項。 這將迫使Visual Studio反映第一個服務引用的類型,並嘗試在可能的情況下引用它們,而不是在其他命名空間中重新創建它們。
通過以這種方式指定重用,Visual Studio使用/ r標志在幕后調用svcutil.exe。
但是,svcutil.exe使用DataContractSerializer
來幫助生成代碼,不幸的是,在解析服務合同時,它具有一套相當嚴格的規則 。
因此,除非您為XSD服務,否則svcutil.exe將切換為使用XmlSerializer
,該XmlSerializer
不支持/ r標志(或重新使用)。 因此,您將無法重復使用類型。
您還可以使用WSCF.blue生成服務合同,因為它具有自己的自定義序列化程序並支持類型的重用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.