1

すべての GET エンドポイントはチャンピオンのように機能しますが、webinvoke method="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 を使用して、どんな助けでも大歓迎です。

4

1 に答える 1

1

これは、私がついに答えに出くわした瞬間まで、私を完全に殺していました。

私の調査結果のソースは次のとおりです。WCF RestでのラップされたBodyStyle

しかし、私は良いものに切り込みます。

まず、ServiceContract の Namespace を設定します。

[ServiceContract(Namespace = "http://mytagservice")]

さて、これを機能させる別の方法があると確信していますが、これが私がハッキングした方法です。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>";

ラップされたメッセージ タイプを使用しているため、このソリューションは必要な数のパラメーターに対して機能します。

于 2012-02-16T03:16:17.863 に答える