簡體   English   中英

從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;
}

如您在我的方法中看到的,我正在返回一個字符串值。 但是當我嘗試在文本框中顯示它時出現錯誤

無法將類型'ApplicationName.ServiceReference1.GetDataResponse'隱式轉換為'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類型。 這是您在消費和調用服務操作時返回的實際類型,由服務元數據定義。

實際上,如果您使用提琴手或類似工具來調用服務操作,則應該看到返回了實際的響應消息。 它看起來像這樣:

<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文件的形式在下載的服務元數據中找到GetDataResponse類型。

因此,當您將服務引用添加到服務時,實際上是Visual Studio下載了服務元數據,讀取了該數據,然后生成了C#代碼,該代碼允許您調用該服務。 在生成該服務操作時,Visual Studio會發現GetDataResponse XSD類型是GetData服務操作的返回類型,因此它會生成一個名為GetDataResponse的C#類型,並將其分配為Service1Client.GetData和GetDataAsync的返回類型。方法。

如果希望檢索操作響應的實際字符串值,則需要深入研究GetDataResponse類型(我相信它將被稱為“ Value”,但我不記得了)。

希望這有助於您的理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM