wcf метод вызова службы restful вызывает ошибку для сообщения http - PullRequest
0 голосов
/ 08 марта 2011

У меня есть простой спокойный сервис 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);

    }
}

это члены данных моего сервиса класса 2;

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

    }
}

thisэто код, который я пытаюсь вызвать методом 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 ]

3 голосов
/ 17 марта 2011

Убедитесь, что у вас есть заголовок Content-Type: application / xml в вашем запросе, и либо установите пространство имен для вашей полезной нагрузки XML или , удалите пространство имен из вашего DataContract.Нравится [DataContract (Namespace = "")]

1 голос
/ 08 марта 2011

Измените тип содержимого запроса на text/xml; charset=utf-8

...