4

サービスの .svc ファイルを参照中にエラーが発生しました。 InvalidOperationException: 操作 MethodName の要求がストリームになるには、操作に Stream 型の単一のパラメーターが必要です" In service Contract:

[OperationContract]
         [WebInvoke(RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,          
       BodyStyle = WebMessageBodyStyle.Bare,
      UriTemplate = "/upload?filename={filename}&objrid={objrid}")]
     string uploadfile(string filename, long objrid, Stream data);`

コンパイラは .svc ファイルを生成していません。ただし、この操作は正常に機能しています。しかし、そのサービスの他の方法は機能していません。この問題を解決するにはどうすればよいですか?

web.config: サービスタグ:

  <service behaviorConfiguration="TransferServiceBehavior" name="namespace.Service">



    <endpoint address="/Service" behaviorConfiguration="webby" binding="webHttpBinding" contract="namespace.Icontract" />
<endpoint binding="basicHttpBinding" contract="namespace.Icontract" />

      </service>

動作構成:

 <behavior name="TransferServiceBehavior">
      <serviceMetadata httpGetEnabled="false"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <serviceThrottling maxConcurrentCalls="500" maxConcurrentSessions="500" maxConcurrentInstances="500"/>
    </behavior>

バインディング cinfig:

この操作は正常に機能していますが、同じサービス契約の他の操作が機能していません: その他の操作:

[OperationContract]
    [WebGet(RequestFormat = WebMessageFormat.Json,
      ResponseFormat = WebMessageFormat.Json,
      BodyStyle = WebMessageBodyStyle.WrappedRequest,
      UriTemplate = "/ProcessViewRequestMobile")]
     Stream ProcessDownload();

最初の操作にコメントすると、2番目の操作は正常に機能します。両方の方法を機能させるにはどうすればよいですか。同じサービス コントラクトに両方のメソッドを追加する必要があります。前もって感謝します。

4

1 に答える 1

1

デフォルトの WCF ストリーム フォーマッタがこれをサポートしていないため、このエラーが発生しています。あなたは試しています。すべて同じメソッド内にあります。これは、何らかの形で機能しているように見えても、サポートされていません。

これが REST エンドポイントでない場合は、複数のパラメーターを 1 つのクラスにラップする MessageContract を使用して、この問題を回避できます。

これが REST エンドポイントまたは同様のカスタム エンドポイントである場合、このプログラミング モデルは実際にサポートされます。これは、REST およびその他のいくつかのシナリオには、複数のパラメーターを正しく処理する独自のフォーマッターがあるためです。ただし、この問題が引き続き発生する場合は、WebHttpBehavior が正しく設定されていることを確認してください。バインディングの TransferMode で Buffered オプションを選択することで、この問題を回避することもできます。しかし、それはストリーミングの目的全体を無効にしているようです.

于 2012-04-26T15:42:26.017 に答える