2011-11-19 36 views
1

我目前正在開發WCF發佈訂閱服務。我的服務具有下面的代碼,錯誤對象引用未設置爲WCF服務上的對象實例

public void PublishPost(string postSampleData) 
{ 
    PostChangeEventArgs e = new PostChangeEventArgs(); 
    e.PostData = postSampleData; 
    PostChangeEvent(this, e); 
} 

,爲postChangeEvent代碼

public class PostChangeEventArgs : EventArgs 
{ 
    public string PostData; 
} 

,並在我的客戶端文件,我在main方法寫了這個代碼,

class Program : IPostingContractCallback 
{ 
static void Main() 
{ 
     InstanceContext site = new InstanceContext(null, new Program()); 
     PostingContractClient client = new PostingContractClient(site); 

     WSDualHttpBinding binding = (WSDualHttpBinding)client.Endpoint.Binding; 
     String clientcallbackaddress = binding.ClientBaseAddress.AbsoluteUri; 
     clientcallbackaddress += Guid.NewGuid().ToString(); 
     binding.ClientBaseAddress = new Uri(clientcallbackaddress); 

     client.Subscribe(); 
} 

public void PostReceived(string postSampleData) 
{ 
    MessageBox.Show("PostChange(item {0})", postSampleData); 
} 
} 

併爲我的數據源代碼...

class Program : IPostingContractCallback 
{ 
    static void Main(string[] args) 
    { 
     InstanceContext site = new InstanceContext(new Program()); 
     PostingContractClient client = new PostingContractClient(site); 

     client.PublishPost("testing"); 

     Console.WriteLine(); 
     Console.WriteLine("Press ENTER to shut down data source"); 
     Console.ReadLine(); 

     //Closing the client gracefully closes the connection and cleans up resources 
     client.Close(); 
    } 

    public void PostReceived(string postSampleData) 
    { 
     Console.WriteLine("PostChange(item {0})",postSampleData); 
    } 
} 

運行服務之後,接着是客戶端,然後是數據源,我想從我的客戶端接收一個彈出消息框。但是,在線上出現錯誤

PostChangeEvent(this, e); 

未將對象引用設置爲對象的實例。

有誰知道如何解決這個問題?

回答

2

聽起來好像沒有訂閱該活動。要檢查這一點,你應該使用:

var handler = PostChangeEvent; 
if (handler != null) 
{ 
    handler(this, e); 
} 

這將停止NullReferenceException,但當然不會解決,爲什麼沒有用戶......你還沒有表現出任何事情訂閱事件 - 你期望訂閱什麼?

+0

嗯。所以你的意思是我沒有訂閱者?只是爲了檢查,我的客戶端文件中的代碼是否已經訂閱了該服務? – Thomas

+0

@Thomas:是的,沒有訂戶,所以PostChangeEvent爲null。我不知道客戶端代碼是否意味着訂閱一個事件處理程序 - 它看起來像WCF的東西,我不明白...但從C#語言的角度來看,它肯定不像在那裏是任何用戶... –

+0

好吧!謝謝你的回覆! – Thomas

相關問題