Вы не упомянули, как определяется услуга.Предполагая, что ваша конечная точка использует webHttpBinding
, а поведение конечной точки - <webHttp/>
со значениями по умолчанию, тогда значением по умолчанию для стиля тела будет «Голый», что означает, что запрос должен содержать только сериализованную версию параметра.В этом случае вы можете отправить строку {"data":"hello world"}
.
. Если вы хотите быстро найти ожидаемый формат для службы WCF, вы можете использовать WCF client , используятот же контракт / привязка / поведения, и отправить сообщение на сервер (и перехватить его на fiddler).Например, код ниже показывает сервер, похожий на ваш, и клиент, который отправляет запрос на него.
public class StackOverflow_7492678
{
public class RequestMessage
{
public string data;
}
public class ResponseMessage
{
public string data;
}
[ServiceContract]
public interface ITest
{
[OperationContract]
ResponseMessage GetData(RequestMessage message);
}
public class Service : ITest
{
public ResponseMessage GetData(RequestMessage message)
{
return new ResponseMessage { data = message.data };
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
var endpoint = host.AddServiceEndpoint(typeof(ITest), new WebHttpBinding(), "");
endpoint.Behaviors.Add(new WebHttpBehavior());
host.Open();
Console.WriteLine("Host opened");
ChannelFactory<ITest> factory = new ChannelFactory<ITest>(new WebHttpBinding(), new EndpointAddress(baseAddress));
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
ITest proxy = factory.CreateChannel();
Console.WriteLine(proxy.GetData(new RequestMessage { data = "mydata" }).data);
((IClientChannel)proxy).Close();
factory.Close();
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}