从 windows 应用访问 WCF 服务方法

Accessing the WCF service method from windows app

我有一个 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;
}

正如您在我的方法中看到的那样,我正在 returning 一个字符串值。但是当我尝试在文本框中显示它时,它给出了错误

Cannot implicitly convert type 'ApplicationName.ServiceReference1.GetDataResponse' to 'string'

如果我使用 res.ToString() 它将打印

ClaimAssistantApplication.ServiceReference1.GetDataResponse

那不是我的字符串 return method.I,我是 WCF 服务的新手。有什么方法可以访问输出字符串吗?

您对这应该如何工作的期望是不正确的。

如果您想了解原因,请查看您的服务 WSDL。您可以通过在 visual studio 命令提示符下使用 disco.exe 工具来执行此操作,该工具会将所有服务元数据下载到目录:

disco /out:myOutputDir http://MyServiceAddress

在您的服务 WSDL 中,您会看到其中有一个 wsdl:operation 元素,它定义了您的服务操作。类似于:

<wsdl:operation name="GetData">

如果查看该元素,您应该会看到定义了 wsdl:output 消息类型。按照惯例,这将被称为:

(operation name)Response

因此在您的实例中,消息将被定义为 GetDataResponse 类型。这是您使用和调用服务操作时 return 的实际类型,由服务元数据定义。

事实上,如果您使用 fiddler 或类似的东西来调用服务操作,您应该会看到实际的响应消息被 returned。它看起来像这样:

<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 服务操作的 return 类型,因此它生成一个名为 GetDataResponse 的 C# 类型,并将其赋值作为 return 类型的 Service1Client.GetData 和 GetDataAsync 方法。

如果你想获取你的操作响应的实际字符串值,那么你需要深入到 GetDataResponse 类型(我相信它会被称为"Value",但我不记得了)。

希望这对您的理解有所帮助。