无法在WCF C#中接收xml发布请求值

时间:2019-08-07 12:43:41

标签: c# rest wcf

我正在尝试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;

1 个答案:

答案 0 :(得分:0)

我们应该使用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中调用该服务(请注意自定义类的名称空间)。
enter image description here
请参考我以前与WebMessageBodyStyle属性有关的答复。
Get the object is null using JSON in WCF Service
随时让我知道问题是否仍然存在。