2009-08-30 17 views
26

multipart/form-dataつまり、エンコードされたフォームポストを受け入れるWCFサービスのことを誰かが知っているか、もっと良い例がありますか?ウェブページからのファイルのアップロード?WCFサービスでポストされたマルチパート/フォームデータを受け入れる

私はGoogleで空になっています。

のTa、Antの

+0

私の答えを見てください:http://stackoverflow.com/a/21689347/67824 –

+0

このリンクは私のために働く、私はあなたがそれからいくつかのアイデアを得ることを願っています。 http://stackoverflow.com/questions/7460088/reading-file-input-from-a-multipart-form-data-post/14514351#14514351 –

答えて

57

だから、ここに...

[ServiceContract] 
public interface IService1 { 

    [OperationContract] 
    [WebInvoke(
     Method = "POST", 
     BodyStyle = WebMessageBodyStyle.Bare, 
     UriTemplate = "/Upload")] 
    void Upload(Stream data); 

} 

の下に作成して、唯一のパラメータのためのストリームを受け付ける操作は、WebInvokeを飾るあなたのサービス契約を作成します。クラス...

public class Service1 : IService1 { 

    public void Upload(Stream data) { 

     // Get header info from WebOperationContext.Current.IncomingRequest.Headers 
     // open and decode the multipart data, save to the desired place 
    } 

また、ストリーム配信を受け入れるにはSystem.Webの中にも、データ、および最大サイズ

<system.serviceModel> 
    <bindings> 
    <webHttpBinding> 
     <binding name="WebConfiguration" 
       maxBufferSize="65536" 
       maxReceivedMessageSize="2000000000" 
       transferMode="Streamed"> 
     </binding> 
    </webHttpBinding> 
    </bindings> 
    <behaviors> 
    <endpointBehaviors> 
     <behavior name="WebBehavior"> 
     <webHttp />   
     </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
     <behavior name="Sandbox.WCFUpload.Web.Service1Behavior"> 
     <serviceMetadata httpGetEnabled="true" httpGetUrl="" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <services>  
    <service name="Sandbox.WCFUpload.Web.Service1" behaviorConfiguration="Sandbox.WCFUpload.Web.Service1Behavior"> 
     <endpoint 
     address="" 
     binding="webHttpBinding" 
     behaviorConfiguration="WebBehavior" 
     bindingConfiguration="WebConfiguration" 
     contract="Sandbox.WCFUpload.Web.IService1" /> 
    </service> 
    </services> 
</system.serviceModel> 

System.Webの

で許可されるデータの量を増やす
<system.web> 
     <otherStuff>...</otherStuff> 
     <httpRuntime maxRequestLength="2000000"/> 
</system.web> 

これは単なる基本ですが、進捗状況を追加できますメソッドを使用してAjaxプログレスバーを表示し、セキュリティを追加することができます。

+2

ストリームで送信されているすべての迷惑メールを削除するには: Content-Disposition :, Content-Type:etc ...これをイメージで動作させようとしています。また、なぜ他のパラメータがコンテナ定義 – Adam

+0

であれば、どのようにしてコンセプトを決めることができますか? – Gluip

1

私は正確にあなたがここで達成しようとしているのか分からないませんが、何がビルトインのサポート「古典的な」SOAPベースのWCFでフォームポストデータをキャプチャし、処理するために。あなたはそれを自分で行う必要があります。

一方、webHttpBindingを使用してRESTベースのWCFについて説明している場合は、HTTP POSTメソッドで呼び出される[WebInvoke()]属性で修飾されたサービスメソッドを使用できます。

[WebInvoke(Method="POST", UriTemplate="....")] 
    public string PostHandler(int value) 

URIテンプレートは、HTTP POSTが行われる場所で使用するURIを定義します。あなたはそれをあなたのASP.NETフォーム(またはあなたが実際に投稿をするのに使っているもの)に引き上げる必要があります。

RESTスタイルWCFの概要については、WCF RESTスターターキットのAaron Skonnardのscreen cast seriesとその使用方法を参照してください。

マルク・

+1

こんにちはマーク、 私は安らかなwcfサービスをしたいです[input type = file /]を持つhtml形式の投稿データを受け入れることができます。 私はファイルのないフォームを投稿することができました。 私はバイトストリームにファイルを変換することができないので、私はクライアントアプリケーションだけのブラウザを望んでいません、マルチパート/フォームデータhttp投稿 –

関連する問題