2014-09-29 55 views
0

我正在實現WCF服務和客戶端應用程序。「App.CallbackHandler」不實現接口成員 - c#

  1. 有一個客戶端類:

    private class CallbackHandler : ServiceReference1.IStockQuoteServiceCallback 
    { 
        public async Task SendQuoteAsync(string code, double value) 
        { 
         Console.WriteLine("{0}: {1:f2}", code, value); 
        } 
    } 
    
  2. 以及服務接口類:

    public interface IStockQuoteCallback 
    { 
        [OperationContract(IsOneWay = true)] 
        Task SendQuote(string code, double value); 
    } 
    

我不知道爲什麼它說

'App.Program.CallbackHandler' 不實現接口成員 'App.ServiceReference1.IStockQuoteServiceCallback.SendQuote(字符串,雙)'

有關於上述代碼的服務參考:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] 
    [System.ServiceModel.ServiceContractAttribute(ConfigurationName="ServiceReference1.IStockQuoteService", CallbackContract=typeof(WSWCF_pretest_android.ServiceReference1.IStockQuoteServiceCallback))] 
public interface IStockQuoteService { 

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://tempuri.org/IStockQuoteService/StartSendingQuotes")] 
    void StartSendingQuotes(); 

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://tempuri.org/IStockQuoteService/StartSendingQuotes")] 
    System.Threading.Tasks.Task StartSendingQuotesAsync(); 
} 

public interface IStockQuoteServiceCallback { 

    [System.ServiceModel.OperationContractAttribute(IsOneWay=true, Action="http://tempuri.org/IStockQuoteService/SendQuote")] 
    void SendQuote(string code, double value); 
} 

方法簽名應該是相同的。

有什麼建議嗎?

+1

接口也不同。 IStockQuoteServiceCallback與IStockQuoteCallback – tnw 2014-09-29 15:55:00

+0

但是,如果我將'ServiceReference1.IStockQuoteServiceCallback'重命名爲'ServiceReference1.IStockQuoteCallback',它不會找到類型... – Flash1232 2014-09-29 16:00:31

+0

您確定*''在'ServiceReference1'中定義了''istockQuoteCallback''嗎? – tnw 2014-09-29 16:02:41

回答

1

方法簽名是相同的。

不,他們不是。

您的界面有一個名爲SendQuote的方法,但是您的類有一個名爲SendQuoteAsync的方法。

您需要讓它們具有相同的名稱,既可以是SendQuoteAsync也可以是兩個SendQuote

另外(thanks tnw),您發佈的界面與班級中的實用界面不同。 IStockQuoteCallback是界面的名稱,但是您正在實施IStockQuoteServiceCallback

修復那些應該修復或減少您的錯誤。


你似乎混淆了你擁有的兩個接口。作爲參考,這些都是您已經張貼接口:

public interface IStockQuoteCallback 
{ 
    Task SendQuote(string code, double value); 
} 

public interface IStockQuoteServiceCallback 
{ 
    void SendQuote(string code, double value); 
} 

一個返回Task。另一個返回void。你需要選擇一個接口來使用並返回正確的數據類型。


你的最後一個問題是,你正在試圖使該方法異步,當方法是異步。方法簽名必須匹配,即使使用此關鍵字。所以這個:

public async Task QuoteAsync(string code, double value) 

是不一樣的

public Task SendQuote(string code, double value) 

要麼你必須改變接口,或者你被卡住使得實現的方法非異步。

+0

它只是產生一個新的錯誤WSWCF_pretest_android.Program.CallbackHandler沒有實現接口成員'WSWCF_pretest_android.ServiceReference1.IStockQuoteCallback.SendQuote(string,double)'。 'WSWCF_pretest_android.Program.CallbackHandler.SendQuote(string,double)'不能實現'WSWCF_pretest_android.ServiceReference1.IStockQuoteCallback.SendQuote(string,double)',因爲它沒有匹配的返回類型'void'。「:/ – Flash1232 2014-09-29 16:14:08

+0

好的,那麼'''''''''''''''''''''''''''''接口'IStockQuoteCallback'具有'SendQuote'返回一個'Task',但是你的錯誤表明它真的返回'那麼你想使用哪個界面?一個返回一個「任務」,另一個不返回。 – gunr2171 2014-09-29 16:17:52

+0

嗯,我現在採取任務,但現在它再次說''WSWCF_pretest_android.Program.CallbackHandler'沒有實現接口成員'WSWCF_pretest_android.ServiceReference1.IStockQuoteServiceCallback.SendQuote(string,double)'' 我應該改變什麼?順便說一句,這是來自MSDN的一個例子,我不知道爲什麼我應該使用異步任務,如果我一次只運行一個函數。 – Flash1232 2014-09-29 16:26:34

相關問題