2012-10-29 73 views
3

我想通過wcf服務傳遞/檢索以下類的實例。對象也應該攜帶由它的類定義的方法。可能嗎?假設下面的類:通過WCF服務傳遞和檢索具有方法的類

[DataContract] 
public class MyClass 
{ 
    [DataMember] 
    public string Name; 

    public MyClass() 
    { 

    } 

    public MyClass(string name) 
    { 
     this.Name = name; 
    } 

    public void SetName(string name) 
    { 
     this.Name = name; 
    } 

    public string GetName() 
    { 
     return this.Name; 
    } 
} 

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    MyClass GetMyClassInstance();   
} 

public class MyService:IMyService 
{ 
    public MyClass GetMyClassInstance() 
    { 
     return new MyClass("hello"); 
    } 
} 

現在,當我在我的客戶端應用程序項目添加到爲MyService參考,數據契約MyClass的,將會產生與服務客戶端一起,說MyServiceClient,所以,我做以下:

MyServiceClient client=new MyServiceClient(); 
MyClass myClass1= client.GetMyClassInstance(); 

但我真正的問題是,從服務得到結果後,這是否是可能的(?):

myClass1.SetName("oops!!!"); 

同時傳輸數據合作ntracts,它們中的方法是否也會被傳輸?我的業務對象也包含方法,它們需要通過WCF傳遞。有沒有辦法?通過WCF傳遞像這樣的BO是一個好習慣嗎? 在此先感謝!

回答

2

WCF交換XML(或JSON)文檔。用'DataMember'標記的方法值將出現在文檔中。在方法中沒有代碼被序列化。

+0

@icryder:謝謝! – Anantha

+0

DataMember不能應用於方法。從MSDN: '[AttributeUsageAttribute(AttributeTargets.Property | AttributeTargets.Field,Inherited = false, \t AllowMultiple = false)] public sealed class DataMemberAttribute:Attribute' –

0

這些方法不會被WCF傳遞,但是在編譯時方法是固定的,所以在運行時要傳遞它們會有點奇怪。

如果您希望客戶端對象具有與服務器對象相同的方法,最簡單的方法是將數據合約放入其自己的項目 中,然後將生成的DLL提供給客戶端。

然後,當客戶端從您的WSDL生成WCF代理時,他們選擇重用已知類而不是生成新類。爲此,在添加服務引用時,單擊「高級」,然後查看「引用程序集中的重用類型」選項。

enter image description here

相關問題