web-dev-qa-db-ja.com

ポストエンコードされたマルチパート/フォームデータを受け入れるWCFサービス

エンコードされたフォームポストmultipart/form-dataを受け入れるWCFサービスのことを知っている人、またはもっと良い例はありますか? Webページからのファイルのアップロード?

グーグルで空っぽになりました。

タ、アリ

31

だから、ここに行く...

以下のようにWebInvokeで装飾して、唯一のパラメーターのストリームを受け入れる操作であるサービスコントラクトを作成します。

[ServiceContract]
public interface IService1 {

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

}

クラスを作成...

    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.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で許可されるデータの量を増やします。

<system.web>
        <otherStuff>...</otherStuff>
        <httpRuntime maxRequestLength="2000000"/>
</system.web>

これは単なる基本ですが、Ajaxプログレスバーを表示するProgressメソッドを追加できるため、セキュリティを追加したい場合があります。

60

ここで何を達成しようとしているのか正確にはわかりませんが、フォームポストデータをキャプチャして処理するための「クラシック」SOAPベースのWCFには組み込みのサポートがありません。あなた自身でそれをしなければならないでしょう。

一方、webHttpBindingを使用したRESTベースのWCFについて話している場合、HTTP POSTメソッド。

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

URIテンプレートは、HTTP POSTを配置する必要がある場所で使用するURIを定義します。これをASP.NETフォーム(または実際に実行するために使用しているもの)にフックする必要があります役職)。

RESTスタイルのWCFのすばらしい紹介については、WCFのアーロンスコナードの スクリーンキャストシリーズ をチェックしてくださいRESTスターターキットとその方法これを使って。

マーク

1
marc_s