Отправка XML-данных в службу WCF REST - PullRequest
2 голосов
/ 26 июля 2011

Существует собственная служба WCF REST, необходимо отправить ей сообщение в формате XML.Похоже, что этот вопрос задавали и отвечали несколько раз, но после попытки каждого решения я все еще не добился успеха.

Сервер: интерфейс

[ServiceContract]
public interface ISDMobileService
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Xml, ResponseFormat=WebMessageFormat.Xml)]
    int ProcessMessage(string inputXml);
}

Сервер: класс

public class Service : ISDMobileService
{
    public int ProcessMessage(string inputXml)
    {
        Console.WriteLine( "ProcessMessage : " + inputXml );
        return 0;
     }  
}

Сервер: хостинг

class Program
{
    static void Main(string[] args)
    {
        WebServiceHost          host    =   new WebServiceHost(typeof(Service), new Uri("http://172.16.3.4:7310"));
        WebHttpBinding          webbind = new WebHttpBinding(WebHttpSecurityMode.None);

        ServiceEndpoint         ep      = host.AddServiceEndpoint(typeof(ISDMobileService), webbind, "");
        ServiceDebugBehavior    stp     =   host.Description.Behaviors.Find<ServiceDebugBehavior>();
        stp.HttpsHelpPageEnabled    =   false;

        host.Open();
        Console.WriteLine("Service is up and running. Press 'Enter' to quit >>>");
        Console.ReadLine();

        host.Close();
    }
}

fiddler request

Запрос от fiddler без чего-либо в «теле запроса» работает просто отлично и запускает точку останова внутри метода ProcessMessage класса Service, любой вариант данных в «теле запроса», например: test || тест ||inputXml = "test" || test и т. Д. Дает HTTP / 1.1 400 Bad Request

Буду признателен за любую помощь с этим

1 Ответ

3 голосов
/ 26 июля 2011

Несколько вещей:

  • Поскольку вы используете WebServiceHost, вам не нужно явно добавлять конечную точку службы (позвоните по номеру host.AddServiceEndpoint(...) в главном.
  • Операция принимает параметр string; если вы хотите отправить его в XML, вам нужно обернуть строку в соответствующий элемент. Попробуйте это тело, и оно должно работать:

Body:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">This is a string encoded in XML</string>

Вы также можете отправить его в различных форматах, например, в формате JSON. Этот запрос также должен работать

POST http://.../ProcessMessage
Host: ...
Content-Type: application/json
Content-Length: <the actual length>

"This is a string encoded in JSON"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...