2011-06-20 11 views
0

私は単純なresftul wcfサービスを持っています。 .SVCファイルには、この安心してWCFが悪いリクエストエラー

<%@ ServiceHost Service="NameSpace.RestfulService" Factory="System.ServiceModel.Activation.WebServiceHostFactory" %> 

インターフェイスメソッドの宣言サービス

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(MyObj)); 
     MemoryStream ms = new MemoryStream(); 
     serializer.WriteObject(ms, new MyObj() { MyObjId = "A", RowVersion = 1 }); 
     string jason = Encoding.Default.GetString(ms.ToArray()); 

     //get a handle to the request stream to write data to it  
     WebRequest myRequest = WebRequest.Create("http://localhost/MyService.svc/test2"); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/jason; charset=utf-8"; 

     StreamWriter sw = new StreamWriter(myRequest.GetRequestStream()); 
     sw.Write(jason); 
     sw.Close(); 

     //get a handle to the response stream from the server to read the response 
     WebResponse myResponse = myRequest.GetResponse(); 
     DataContractJsonSerializer RecData = new DataContractJsonSerializer(typeof(List<MyObj>)); 

     var result = (List<MyObj>)RecData.ReadObject(myResponse.GetResponseStream()); 

を呼び出すために、WPFクライアント上

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "test2", RequestFormat = WebMessageFormat.Json,ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)] 
     List<MyObj> Test2(MyObj test); 

メソッドの実装

public List<MyObj> Test2(MyObj test) 
    { 
     return new List<MyObj>() { new MyObj() { MyObjId = "1", RowVersion = 1 }, new MyObj() { MyObj= "2", RowVersion = 2 } }; 
    } 

方法のように見えます私が試してみるときRequestStream "myRequest.GetRequestStream()"を取得するには、不正なリクエストエラー400と表示されます。 このエラーの原因は何ですか?

ありがとうございました

答えて

1

あなたのコンテンツタイプは "application/jason; charset = utf-8"です。 JSONのMIMEタイプは "application/json"(no 'a')です。 WCFサービスがコンテンツタイプを認識せず、要求を直ちに拒否するため、最初のヘッダー(を呼び出すと終了します)を送信すると、400の理由が考えられます。

+0

ビンゴ....それだった:)。あなたの助けを大変感謝します。 – Bullish