неправильный запрос от веб-вызова WCF - PullRequest
1 голос
/ 28 декабря 2011

Все мои конечные точки GET работают как чемпион, но я пытаюсь реализовать метод webinvoke = "POST".

Я думаю, что с моим форматом что-то не так, но я не могу сказать, что это, кто-то может помочь?

[ServiceContract]
interface iFlowRate
{
     [OperationContract]
     [WebInvoke(Method="POST",UriTemplate = "Add?apikey={apikey}",RequestFormat= WebMessageFormat.Xml)]
     string AddFlowRate(string apikey,FlowRate flowrate);
}

когда я отлаживаю это, он даже не входит в этот метод. Я звоню в службу, как это.

string postData = "<FlowRate ><wellname>wellname</wellname></FlowRate>";
//Setup the http request.
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentLength = postData.Length;
request.ContentType = "application/xml";
request.KeepAlive = true;

StreamWriter streamwriter = new
StreamWriter(request.GetRequestStream());
streamwriter.Write(postData);
streamwriter.Close();

// Get the response.
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Read the response
StreamReader responsereader = new StreamReader(response.GetResponseStream());
string strResponseData = responsereader.ReadToEnd();

Есть идеи? Кстати, используя WCF 4.0, любая помощь очень ценится.

1 Ответ

1 голос
/ 16 февраля 2012

Это полностью убивало меня до тех пор, пока я не наткнулся на ответ.

Вот источник моих выводов: Wrapped BodyStyle в WCF Rest

Но я подойду к хорошему.

Сначала установите пространство имен вашего ServiceContract.

* * 1010

Теперь я уверен, что есть другой способ заставить это работать, но я так его взломал. Установите для BodyStyle значение Wrapped. Формат запроса по умолчанию - XML, поэтому вам не нужно устанавливать его здесь, если вы этого не хотите.

 [WebInvoke(Method="POST",UriTemplate = "Add?apikey={apikey}", BodyStyle = WebMessageBodyStyle.Wrapped)]

Затем измените ваш xml, чтобы включить оболочку и пространство имен. Будьте особенно осторожны с именами тегов, так как они чувствительны к регистру.

string postData = "<AddFlowRate xmlns='http://mytagservice'><flowrate><wellname>wellname</wellname></flowrate></AddFlowRate>";

Поскольку он использует упакованный тип сообщения, это решение будет работать для любого количества параметров.

...