2011-07-12 36 views
3

私は、他のものの中でファイルをアップロードできるようにする必要があるWCF Webサービスを開発しています。WCF RESTファイルアップロード

現在「フロアプラン」アイテムを追加するための私の方法は次のようになります。私は画像のような方法で使用することができ、この呼び出しの一部としてアップロードされるように、それを変更する必要が

[OperationContract] 
[WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Xml, 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "Floorplan?token={token}&floorplan={floorplan}")] 
string XmlInputFloorplan(string token, string floorplan); 

この場合にはbyte[]

public static Guid AddFile(byte[] stream, string type); 

は、画像の内容です。結果として得られるGUIDはデータレイヤーに渡され、フロアプランの追加が確定されます。

だから私は二つのことを把握する必要があります。

1)それはまた、パラメータとしてイメージすることができますように、私はXmlInputFloorplanインターフェイスメソッドを変更する必要がありますどのように?
2)変更後にサービスを利用するにはどうすればよいですか?

ありがとうございます!

<?xml version="1.0" encoding="us-ascii" ?> 
<CreateFloorplanRequest> 
    <Token></Token> 
    <Floorplan></Floorplan> 
    <Image></Image> 
</CreateFloorplanRequest> 

と画像私はバイトに変換した画像ファイルを表しベース64エンコードされた文字列が含まれています

[OperationContract] 
[WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Xml, 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "Floorplan")] 
XmlDocument XmlInputFloorplan(Stream content); 

は、入力XMLなどを想定しています。ここ

は、私はそれを解決する方法であります[]経由で:

これを可能にするために、私はWeb.configを以下のように設定しなければなりませんでした:

<service behaviorConfiguration="someBehavior" name="blah.blahblah"> 
    <endpoint 
     address="DataEntry" 
     behaviorConfiguration="web" 
     binding="webHttpBinding" 
     bindingConfiguration="basicBinding" 
     contract="blah.IDataEntry" /> 
</service> 

<bindings> 
    <webHttpBinding> 
    <binding name="basicBinding" maxReceivedMessageSize ="50000000" 
     maxBufferPoolSize="50000000" > 
     <readerQuotas maxDepth="500000000" 
     maxArrayLength="500000000" maxBytesPerRead="500000000" 
     maxNameTableCharCount="500000000" maxStringContentLength="500000000"/> 
     <security mode="None"/> 
    </binding> 
    </webHttpBinding> 
</bindings> 

答えて

4

あなたのURIは完全に違って見えるだろう - このような何か私が与えるストリームにバイト配列を変更する自由を撮影した

[OperationContract] 
[WebInvoke(Method = "POST", 
      ResponseFormat = WebMessageFormat.Xml, 
      BodyStyle = WebMessageBodyStyle.Wrapped, 
      UriTemplate = "Floorplan?type={type}&token={token}&floorplan={floorplan}")] 
Guid XmlInputFloorplan(string type, string token, string floorplan, Stream image); 

を(私はいくつかの推測を作るために持っています)

これを呼び出すには、正しいUri(型、トークン、フロアプランを含む)を使用してWebRequestを作成し、POSTを実行することができます。コンテンツタイプをイメージのフォーマット(jpeg、pngなど)に適したものにし、イメージをイメージにコピーするリクエストストリームを取得します。次にWebRequestでGetResponseを呼び出してHTTPリクエストを作成します

+0

これは動作しません。私には、 'Stream'パラメータで何をすべきかわからないという叫び声がありました。 – FlyingStreudel

+0

どこに叫んでいますか? –

+0

それは、ポストのために、ちょうど1つのパラメータ呼び出しストリームが必要であると言っていました。私はすべての引数を取り除き、xmlファイルをストリームに送信するだけでした。それは正しい道に私を置いて以来、病気はまだ答えを受け入れる。 – FlyingStreudel

2

GETとしてバイト配列を渡すことはできません。その多くのデータをリクエスト文字列に渡すと、うまくいくはずです。あなたはhttpをする必要がありますPOST