为啥在我的 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 模型中调用方法时出现“不应静态调用非静态方法”?
为啥在我的 Postgres 函数中使用 IF 语句时出现语法错误?