wcf restful service方法调用http post的错误

时间:2011-03-08 13:50:07

标签: wcf rest http-post webrequest wcf-rest

我有一个简单的restful wcf服务,我只是为了好玩而创建的。我试过调用post方法,但我很费劲。这是摘要;

这是我的服务合约界面;

namespace WcfServiceWithNortwind.Smooth {

    [ ServiceContract]
    public interface INorthwindService {

        [ WebGet (UriTemplate = "/" )]
        [ OperationContract ]
        List <Category2 > GetCategories();

        [ WebGet (UriTemplate = "categories/{id}" )]
        [ OperationContract ]
        Category2 GetCategory(string id);

        [ WebInvoke (UriTemplate = "categories/{id}" , Method = "DELETE")]
        [ OperationContract ]
        void DeleteCategory(string id);

        [ WebInvoke (UriTemplate = "categories" , Method = "POST")]
        void AddCategory(Category2 category);

    }
}

这是我的服务的数据成员,即Category2 Class;

namespace WcfServiceWithNortwind.Smooth {

    [ DataContract]
    public class Category2 {

        [ DataMember ]
        public int CategoryID { get; set ; }

        [ DataMember ]
        public string CategoryName { get; set ; }

        [ DataMember ]
        public string Description { get; set ; }

    }
}

这是我试图调用post方法的代码;

    System.Xml. XmlDocument doc = new System.Xml. XmlDocument();
    doc.Load(context.Server.MapPath( "~/@xml/category.xml" ));

    string strHostAddress = "http://localhost:54860/Smooth/Nortwind.svc/categories" ;

    string xmldata = doc.OuterXml;
    string _data = String .Format( "{0}{1}", "category=" , xmldata);

    WebRequest _WebRequest = WebRequest .Create(strHostAddress);
    _WebRequest.Method = "POST" ;

    byte [] byteArray = Encoding .UTF8.GetBytes(_data);
    _WebRequest.ContentType = "application/x-www-form-urlencoded" ;
    _WebRequest.ContentLength = byteArray.Length;

    Stream dataStream = _WebRequest.GetRequestStream();
    dataStream.Write(byteArray, 0, byteArray.Length);
    dataStream.Close();

    var _response = _WebRequest.GetResponse();

这是我用来发送的xml文件,它是category.xml;

<? xml version =" 1.0 "?>
<Category2>
  <CategoryID />
  <CategoryName> Tugberk's Category </CategoryName>
  <Description> .net, wcf, wpf, mvc, silverlight </Description>
</Category2>

当我运行代码时,一旦我尝试_WebRequest.GetResponse()调用,我就会收到以下错误;

  

传入的消息有一个   意外的消息格式'Raw'。该   预期的消息格式   操作是'Xml'; 'Json的'。这个可以   因为WebContentTypeMapper具有   尚未在绑定上配置。   请参阅文档   WebContentTypeMapper以获取更多详细信息。

我也尝试用fiddler发布它的请求构建器功能,我也得到了同样的错误。

那么我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

确保您的请求中包含标题Content-Type:application / xml,并在XML有效负载上设置命名空间从DataContract中删除命名空间。像[DataContract(Namespace =“”)]

答案 1 :(得分:1)

将请求的内容类型更改为text/xml; charset=utf-8