无法在 wcf c# 中接收 xml 发布请求值
Posted
技术标签:
【中文标题】无法在 wcf c# 中接收 xml 发布请求值【英文标题】:can't receive xml post request values in wcf c# 【发布时间】:2019-12-15 02:45:29 【问题描述】:我正在试验 WCF 并使用 id 和 name 参数构建了一个标准产品类,我的目标是从休息中接收它,并返回状态。
[DataContract]
public partial class Product
[DataMember]
public int Id get; set;
[DataMember]
public string Name get; set;
[DataContract]
public class Message
[DataMember]
public bool isSucceed get; set;
用相对的 Post 方法来
[WebInvoke(UriTemplate = "ProductPingXML", Method = "POST",
RequestFormat = WebMessageFormat.Xml)]
[Description("Recive Post Message")]
public Message PingXmlProduct(Product Input)
Message message = new Message();
//Todo Capture what rest send
if (Input == null)
message.isSucceed = false;
else
message.isSucceed = true;
// strip the xml from the body
// Assign the values to the new obj class Product
return message;
我正在尝试通过邮递员使用 XML 帮助架构中的这个 XML 来调用它。
<Product xmlns="http://schemas.datacontract.org/2004/07/RestML.Data">
<Id>2147483647</Id>
<Name>String content</Name>
</Product>
使用 WCF 对我来说相对较新,所以我可能会在这里遗漏一些东西。所以我的问题是: 如何在 PingXmlProduct 中接收邮递员 XML 并将相应的值分配给新的 obj;
【问题讨论】:
此时(在PingXmlProduct
方法内),xml 已经被 WCF 框架“从正文中剥离”。您只需将Product
类的一个实例分配给Input
变量,并使用xml 中的值填充属性Id 和Name。
好的,如果我尝试使用 xml 请求发布,我会从邮递员那里得到“无法得到任何响应”?是不是因为响应是一个字符串而不是 xml
状态码是什么? 404?那将意味着“未找到”。我建议根据状态码采取后续步骤。
【参考方案1】:
我们应该使用 webhttpbinding 创建 Restful 风格的 WCF 服务。请参考以下配置。
<system.serviceModel>
<services>
<service name="Server1.MyService">
<endpoint address="" binding="webHttpBinding" contract="Server1.IService" behaviorConfiguration="rest"></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:5577"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="rest">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
那么我们应该指定webmessagebodystyle。
[OperationContract]
[WebInvoke(BodyStyle =WebMessageBodyStyle.Bare)]
void GetData(Product product);
假设有以下定义。
[DataContract]
public class Product
[DataMember]
public int ID get; set;
[DataMember]
public string Name get; set;
我们可以在 Postman 中像下面这样调用服务(请注意自定义类的命名空间)。 关于WebMessageBodyStyle属性请参考我之前的回复。Get the object is null using JSON in WCF Service 如果问题仍然存在,请随时告诉我。
【讨论】:
以上是关于无法在 wcf c# 中接收 xml 发布请求值的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# WCF 中接收 Stripe api webhook
在 C# 中为 WCF 服务反序列化简单的 XML 数组对象