[英]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.