2011-12-28 16 views
0

私のGETエンドポイントはすべてチャンピオンのように機能しますが、私はwebinvokeメソッド= "POST"を実装しようとしています。WCF Webからの不正要求が発生しました

私のフォーマットには何か問題があると思いますが、それが何であるかは分かりません。

[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(); 

BTWは、WCF 4.0を使用して、どんな助けも大歓迎です。

+1

POSTを実行しようとしているURLは何ですか? –

+0

また、FlowRateクラスはどのように定義されていますか? – carlosfigueira

+0

url = localhost:4369/FlowRate/Add?apikey = 32q13e4-c78a-ce9d-e011-15eacd8e8958 "; {[DataContract] public class FlowRate {[DataMember]パブリック文字列ウェルネーム{get; set;}}} – Matt

答えて

0

これは私が最終的に答えに遭遇した瞬間まで私を完全に殺していました。ここで

は私の調査結果のソースです: Wrapped BodyStyle in WCF Rest

しかし、私は良いものをカットします。

まず、ServiceContractのネームスペースを設定します。

[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>"; 

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

関連する問題