2012-04-24 10 views
4

サービスの.svcファイルを参照している間、エラーを取得します。コンパイラは.SVCファイルを生成していない"InvalidOperationException:操作の型がストリームである単一のパラメータを持つ必要があります"

[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);` 

が、これを: InvalidOperationExceptionが:操作メソッド名で要求をストリームするための操作は、そのタイプのストリームである」 サービス契約には、単一のパラメータを持っている必要があります。 。?。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> 

behaviorConfiguration:この操作は正常に動作しているが、同じサービス契約の他の操作は機能していない

: その他の操作を:

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

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

がcinfigを結合

私が最初の操作をコメントすると、2番目の操作はうまく動作します。 私はどのようにして両方の方法を動作させることができますか? 同じサービス契約の両方のメソッドを追加する必要があります。 ありがとうございます。

+0

類似の例については、fallowing linkからダウンロードしてください。http://www.satalketo.co.uk/FileUploadWithFilename.zip –

+0

サービスタグから追加のエンドポイントを削除すると検出されました。それはうまく動作します(サービス内のすべてのメソッドが動作していますが).svcファイルがまだコンパイルされていません。(同じエラー)。 サービスタグから追加エンドポイントを削除することで私の問題は解決しますが、 誰かが適切な答えを持っている場合は投稿してください。 –

+0

"ProcessDownload"のResponseFormatと戻り値の型StreamはJsonであってはなりません。ただそれを削除してください。この操作のBodyStyle - Bare。 – Regfor

答えて

1

デフォルトのWCFストリームフォーマッタがこれをサポートしていないため、このエラーが発生しています。あなたは試しています。すべて同じ方法で行われます。たとえそれが何とか動作していても、これはサポートされていません。

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

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

+0

フォーマッタとは何ですか? そして、私のコードが正しくコンパイルされていない理由(これは.svcファイルを生成しない)よりも、残りの部分がこれを処理できます。 –

関連する問題