2014-09-29 54 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

相关问题