从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服务的新手。是否有任何方法可以访问输出字符串?

从windows应用程序访问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",但我记不清了)。