从windows应用程序访问WCF服务方法
本文关键字:服务 方法 WCF 访问 windows 应用程序 | 更新日期: 2023-09-27 18:05:17
我有一个WCf服务,它有这个默认方法
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
在windows应用程序中,我以
方式访问此方法。private async void btnLogin_Click_1(object sender, RoutedEventArgs e)
{
ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
var res = await client.GetDataAsync(78);
txtUsername.Text = res;
}
正如你在我的方法中看到的,我返回一个字符串值。但是当我试图在文本框中显示它时它给出了错误
不能隐式转换类型"ApplicationName.ServiceReference1。GetDataResponse' to 'string'
如果我使用res.ToString()
,它将打印
ClaimAssistantApplication.ServiceReference1.GetDataResponse
这不是我的方法返回的字符串。我是WCF服务的新手。是否有任何方法可以访问输出字符串?
您对如何工作的期望是不正确的。
如果您想了解原因,那么请查看您的服务WSDL。您可以通过在visual studio命令提示符中使用disco.exe工具来完成此操作,该工具将下载所有服务元数据到一个目录:
disco /out:myOutputDir http://MyServiceAddress
在您的服务WSDL中,您将看到其中有一个wsdl:operation
元素,它定义了您的服务操作。比如:<wsdl:operation name="GetData">
如果您查看该元素,您应该看到定义了wsdl:output
消息类型。按照惯例,它将被称为:
(operation name)Response
因此,在您的实例中,消息将被定义为GetDataResponse类型。这是使用和调用服务操作时返回的实际类型,由服务元数据定义。
实际上,如果您使用fiddler或类似的东西来调用服务操作,您应该看到返回的实际响应消息。它看起来像这样:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetDataResponse xmlns:m="YourServiceNamespace">
<getData>You entered: 78</getData>
</m:GetDataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
您应该能够在下载的服务元数据中找到GetDataResponse
类型,可以是内联的,也可以是其中一个.xsd文件。
所以当你向你的服务添加一个服务引用时,visual studio会下载服务元数据,读取它,然后生成c#代码,让你可以调用服务。当生成服务操作时,visual studio看到GetDataResponse XSD类型是GetData服务操作的返回类型,因此它生成一个名为GetDataResponse的c#类型,并将其分配为Service1Client的返回类型。GetData和GetDataAsync方法
如果您希望检索操作响应的实际字符串值,那么您需要钻取GetDataResponse类型(我相信它将被称为"value",但我记不清了)。