为啥在我的 Web 服务中调用此方法时出现错误“无法将类型 'void' 隐式转换为 'string'?

Posted

技术标签:

【中文标题】为啥在我的 Web 服务中调用此方法时出现错误“无法将类型 \'void\' 隐式转换为 \'string\'?【英文标题】:Why am I getting the error "cannot implicitly convert type 'void' to 'string' when calling this method in my Web Service?为什么在我的 Web 服务中调用此方法时出现错误“无法将类型 'void' 隐式转换为 'string'? 【发布时间】:2019-08-21 12:59:39 【问题描述】:

所以我遇到的问题是,当我在 WCF 服务引用中调用一个方法时,我得到带有红色下划线的代码“无法将类型 'void' 隐式转换为 'string'”。最初,我以为我不小心将 webservice 方法设置为 public void GetData() 但是经过进一步审查,我知道它不是。我试图调用的 WCF 方法是:

    public string GetData()
    
       return "StringRecieved";
    

Operation 合约定义如下:

    [ServiceContract]
        public interface IService1
        
            [OperationContract]
            string GetData(); 
        

我调用该方法的地方是在不同的应用程序中。

    Service1Client.EndpointConfiguration endpointConfiguration = new Service1Client.EndpointConfiguration();
        Service1Client service1Client;
        service1Client = new Service1Client(endpointConfiguration);

        string Data = service1Client.GetDataAsync(); //This is where I'm getting my error.

为什么会出现这个错误?该方法设置为字符串,我正在尝试将其分配给字符串。

【问题讨论】:

string GetData()Senator[] GetData();?其中哪一个是正确的?您是否确认客户端生成了最新的代码? 显然GetDataAsync 方法不会返回任何内容(即它是void),但您希望它是一个字符串。 它是字符串 GetData()。我忘记更改我在此处发布的运营合同,因为我必须准确修改它的内容。我还通过更新服务参考来确认客户端是否拥有最新生成的代码。 @DavidG 它在哪里设置为无效?或者它是如何设置为无效的?我可以通过什么方式将其设置为返回字符串? 【参考方案1】:

对于异步,您需要添加事件 GetDataCompleted 和方法。

service1Client.GetDataCompleted += service1Client_GetDataCompleted;
public void service1Client_GetDataCompleted(object sender, wsService1.GetDataCompletedEventArgs e)

   string Data = e.Result.ToString();

【讨论】:

以上是关于为啥在我的 Web 服务中调用此方法时出现错误“无法将类型 'void' 隐式转换为 'string'?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我的 web 应用程序中使用 Tomcat 时出现 Class NotFound Exception?

为啥在 Eloquent 模型中调用方法时出现“不应静态调用非静态方法”?

为啥在 Laravel 中保存数据时出现方法不允许错误?

为啥在我的 Postgres 函数中使用 IF 语句时出现语法错误?

为啥在我的程序中打开某些 wav 文件时出现此错误“EMCIDeviceError”

在我的 Web 应用程序引用的类库中访问 wcf 数据服务时出现问题