我被要求創建一個 WCF Web 服務端點,它將從 xml 檔案中獲取資料作為傳遞給它的引數。
我嘗試創建一個基于虛擬 xml 檔案的簡單 WCF Web 服務

我在下面創建的 Web 服務位于 VB.NET 和 .NET Framework 4.6 中,并且我在 Web 服務代碼底部的 OrderedItem 代碼中生成了 xml 架構,它作為引數傳遞給 PushOrderItem OperationContract,這就是客戶想要的。
<ServiceContract()>
Public Interface IService
<OperationContract()>
Function PushOrderItem(ByVal data As OrderedItem) As String
End Interface
Imports System.Xml.Serialization
Public Class Service
Implements IService
Public Sub New()
End Sub
Function PushOrderItem(ByVal data As OrderedItem) As String Implements IService.PushOrderItem
Return "TEST"
End Function
End Class
<XmlRoot(ElementName:="OrderedItem")>
Public Class OrderedItem
<XmlElement(ElementName:="ItemName", [Namespace]:="http://www.cpandl.com")>
Public Property ItemName As String
<XmlElement(ElementName:="Description", [Namespace]:="http://www.cpandl.com")>
Public Property Description As String
<XmlElement(ElementName:="UnitPrice", [Namespace]:="http://www.cohowinery.com")>
Public Property UnitPrice As String
<XmlElement(ElementName:="Quantity", [Namespace]:="http://www.cpandl.com")>
Public Property Quantity As String
<XmlElement(ElementName:="LineTotal", [Namespace]:="http://www.cohowinery.com")>
Public Property LineTotal As String
<XmlAttribute(AttributeName:="inventory", [Namespace]:="http://www.w3.org/2000/xmlns/")>
Public Property Inventory As String
<XmlAttribute(AttributeName:="money", [Namespace]:="http://www.w3.org/2000/xmlns/")>
Public Property Money As String
End Class
我遇到的問題是,當我創建一個 WCF 客戶端來嘗試使用新的端點時,它似乎沒有像我預期的那樣作業。
下面是我創建的控制臺應用程式的代碼,它讀取 xml 檔案(上面添加的內容)并將其反序列化為 ServiceReference1.OrderedItem 但 ServiceReference1.OrderedItem 的請求實體只包含所有空值?
ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
var reader = new System.Xml.Serialization.XmlSerializer(typeof(ServiceReference1.OrderedItem));
var file = new System.IO.StreamReader(@"C:\OrderItem.xml");
ServiceReference1.OrderedItem request = (ServiceReference1.OrderedItem)reader.Deserialize(file);
var response = client.PushOrderItem(request);
誰能讓我知道我在這里做錯了什么?
uj5u.com熱心網友回復:
可以參考下面的例子,成功反序列化xml:
Message m = Message.CreateMessage(XmlReader.Create("C:\OrderItem.xml"), int.MaxValue, MessageVersion.Soap11);
SoapReflectionImporter importer = new SoapReflectionImporter(new SoapAttributeOverrides(), "xxx");
XmlTypeMapping mapp = importer.ImportTypeMapping(typeof(Class name));
XmlSerializer xmlSerializer = new XmlSerializer(mapp);
var o = (Class name)xmlSerializer.Deserialize(m.GetReaderAtBodyContents());
uj5u.com熱心網友回復:
我沒有創建自己的客戶端,而是使用 SoapUI 開源https://www.soapui.org/來測驗我的 WCF 服務。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/521454.html
