2012-01-25 13 views
3

SOAPとRESTの両方のエンドポイントを持つWebサービスがあります。クライアントからRESTエンドポイントを制御できないという要求を受け入れる必要があります。現在、クライアントは400応答を取得し、私のサーバー上のトレースログはこのエラーを示しています。私はWebContentTypeMapperと考えるが、私はすべての時間を開始したところ、右を終わるように見えることができるすべてを試してみたWCF RESTエンドポイントはRawメッセージ形式を受け入れることを強制できますか?

The incoming message has an unexpected message format 'Raw'. 
The expected message formats for the operation are 'Xml', 'Json'. 

。クライアントからのリクエストは、XMLまたはJSON形式ではないようです。したがって、WebContentTypeMapperからXMLまたはJSONタイプを強制しようとすると、パーサエラーが発生します。

私はこのエンドポイントにメッセージを受け入れることができるかどうかを知る必要があると思います。それは簡単だろう、そうだよね? ...みんな? ...右?

答えて

8

とうまく何それに関係する。 HTTPリクエストのContentTypeは、ストリーム内の内容を示す必要があります。

たとえば、画像をアップロードできるサービスがあるとします。イメージの種類に応じて、さまざまな種類のイメージ処理を実行することができます。次のようにだから我々は、サービス契約を結んでいる:

[ServiceContract] 
interface IImageProcessing 
{ 
    [OperationContract] 
    [WebInvoke(Method="POST", UriTemplate = "images")] 
    void CreateImage(Stream stm); 
} 

実装では、要求のコンテンツタイプを確認し、それに依存した処理を実行:(純粋な意味での)

public void CreateImage(Stream stm) 
{ 
    switch(WebOperationContext.Current.IncomingRequest.ContentType) 
    { 
     case "image/jpeg": 
      // do jpeg processing on the stream 
      break; 

     case "image/gif": 
      // do GIF processing on the stream 
      break; 

     case "image/png": 
      // do PNG processing on the stream 
      break; 

     default: 
      throw new WebFaultException(HttpStatusCode.UnsupportedMediaType); 
    } 
} 
+0

これを拡張できますか? – Jacob

+0

は、私が何を意味するかを説明するための例を追加しました –

+0

私はそれがすべて今働いています。助けてくれてありがとう。 – Jacob

0

私の理解では、RESTはJSONまたはXMLのいずれかが必要であることを、ここで確認している:あなたは操作は、あなたが入ってくるデータを自分で分析することができますストリームを取る作る場合

WCF REST: XML, JSON or Both?

WCF (Windows Communication Foundation) is the new standard for building services with .NET and REST (REpresentational State Transfer) has been a very popular technique when building services and not just in the .NET space. With services, you transport serialized data across the pipe to be worked with and there are a few serialization methods:

Binary: Not for REST services, but provides the smallest packet size. Each end must explicity know how to handle the data.

SOAP: The long running standard for web services. Very descriptive, but a very large packet size due to the amount of meta data.

XML (POX): Plain Old XML provides the just the data with structure without the meta data leaving a smaller packet size.

JSON (JavaScript Object Notation): A new and up coming standard with a similar packet size to a plain XML feed, but can be used directly in JavaScript making it the best option when consuming a service from jQuery.

+0

RESTは、上の制限を設けていません使用されるペイロード形式。しかし、WCFのRESTは、明らかにそうです。 –

関連する問題