2011-03-08 119 views
0

我有一个简单的restful wcf服务,我创建的只是为了好玩。我试图调用post方法,但我很失望。这里是总结;wcf restful服务方法调用http错误的错误

这是我的服务合同界面;

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类;

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()调用收到下面的错误;

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

我也试着用它的请求生成器函数发布它与提琴手,我也有同样的错误。

那么我在这里失踪的家伙?

回答

3

请确保您有头的Content-Type:application/xml进行在您的要求,要么设置的命名空间,你的XML负载从DataContract删除的命名空间。像[DataContract(Namespace =“”)]

+0

我认为问题也与名称空间有关。我没有时间去尝试,但我会在今天。谢谢 ! – tugberk 2011-03-17 11:25:22

+0

我们可以看到解决方案到底有什么成效吗? – franklins 2012-09-24 12:16:43

1

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

+0

我用* application/xml来做到这一点; charset = utf-8 *,正如你用* text/xml; charset = utf-8 *表示的那样。现在我得到这个例外;检查类型为WcfServiceWithNortwind.Smooth.Category2的对象的开始元素时出错。根级别的数据无效。第1行,位置1. – tugberk 2011-03-09 07:22:44