2012-03-28 7 views
4

を失敗した名前のよう私たちは、私たちが解決することはできませんWCFバインディングとストリーミング転送モードで興味深い問題があります。WCFバインディング構成はデフォルトとしてのみ適用されますが、それは

我々はストリーミング転送モードに設定さWCFエンドポイントを持っています。エンドポイントは、デフォルトサイズ(〜65 KB)よりもはるかに大きいメッセージを受信します。そのため、バインディングタグのmaxReceivedMessageSize属性に大きなメッセージサイズを指定しました。 「リモート:我々は、我々は次のエラーが表示されたエンドポイントをペアにしてタグを結合エンドポイントタグのbindingConfiguration属性と属性によって結合するとき

問題がありますサーバーがエラーを返しました:(400)Bad Request "。

両方の属性を削除するとすぐに、bindingConfigurationという名前のはエラーなく動作します。

<binding 
     name="BindingConfiguration" <---- and when this goes away 
    transferMode="Streamed" maxReceivedMessageSize="2147483647" > 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
        maxArrayLength="2147483647" maxBytesPerRead="2147483647" 
        maxNameTableCharCount="2147483647" /> 
    </binding> 

だから、それだけで(明示的に名前のキーなし)デフォルトのバインディングとして動作します。ここでは

<service name="Services.DocumentService" behaviorConfiguration="ServiceBehavior"> 
    <endpoint contract="ServiceContracts.IDocumentService" address="DocumentService" 
       binding="basicHttpBinding" name="basicHttpBinding" 
     bindingConfiguration="BindingConfiguration"  <---- when this goes away 
       behaviorConfiguration="ServiceEndpointBehavior"/> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8080/Documents/"/> 
     </baseAddresses> 
    </host> 
    </service> 

バインディング構成である:ここでは

は、サービスエンドポイントの定義があります。奇妙なことは、どちらのシナリオでも、バインディング構成が実際に適用されている(maxReceivedMessageSizeが正しく設定されている)ことをサービスホスト上で反映して検証できることでした。 WCFのバグでしょうか?

サービスは自己ホスト型です。

非常に感謝しています。

+0

あなたは「テスト」か何か – Rajesh

+0

は、私たちも、このような「XX」、「XXX」、「Z」として、代替名を試してみましたと言うBindingConfiguration以外の別の名前でそれを試してみました:-) – Honzajscz

+0

@Honzajscz問題の解決策を見つけましたか?私はまったく同じ問題を抱えています。なぜ名前付きバインド設定ではうまくいかないのかわかりません...別の設定でホストする別のサービスがある場合、それはもはや機能しないので、空の文字列を使用することはできません。編集:btw、私はstreamed transferModeを使用していません。 – ken2k

答えて

0

最近、初期化コードがデフォルト設定を明示的に使用しているため、web.configの初期設定コードが無視されています。

コードの一部を削除し、web.configの設定が適用されました。

愚かなエラーです。 thier答えを

おかげで誰もが

+0

削除した部分は?私はまた、 "basicHttpBinding"を削除しましたが、まだ動作していません... – John

+0

@John私たちはC#コードを使ってサービスを初期化しました。初期化のC#コードはweb.configの設定を無視していました。 – Honzajscz

0

bindingConfiguration = "BindingConfiguration"を削除すると、バインディング設定の値ではなく、デフォルト値が使用されます。

違いがある:

transferMode="Streamed" 

デフォルトでは、クライアントがバッファリングされ、サーバはストリーミング使用して、その後、あなたが悪いのリクエストエラーが出る期待するので、もし、転送モードは、バッファリングされています。

+0

'bindingConfiguration = "BindingConfiguration"を削除すると、実際に動作するようになり、defrt 65kよりもはるかに大きなファイルをアップロードできます。クライアントもストリーミングに設定されています。 bindingConfigurationを省略すると、実際には名前のないバインディングが使用されているように振る舞います。 – Honzajscz

関連する問題