何度も同じような質問をして申し訳ありません。WPF クライアント アプリケーションで WCF サービスを実行していて、WCF サービスを介してクライアント アプリケーションからデータベースに大量のデータを転送したいのですが、この設定について特別なことは何もありません。もちろん、データ (16kb 以上) をバイト配列としてアップロードしようとすると、通常の「最大配列長クォータを超えました」というメッセージが表示され、サーバー側とアプリで web.config を構成する必要が生じました。クライアント側の .config を使用して、すべてに対してより高いリーダー クォータを含めます。
さて、これはstackoverflowで静かに扱われることが多かったので、多くの調査を行い、最終的にサービスバインディングを追跡した結果にたどり着きました
Trace.WriteLine(OperationContext.Current.EndpointDispatcher.ChannelDispatcher.BindingName)
これによりhttp://tempuri.org/:BasicHttpBinding (他の名前空間が構成されていますが) が得られ、カスタム バインディングが適用されるかどうかという疑問が生じます。私のweb.config(サービス側)のコードの一部を見てください。
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="2147483646" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDataController" closeTimeout="00:05:00"
openTimeout="00:05:00" receiveTimeout="00:05:00" sendTimeout="00:05:00"
maxBufferPoolSize="500000000" maxBufferSize="500000000" maxReceivedMessageSize="500000000" messageEncoding="Mtom">
<readerQuotas maxDepth="500000000" maxStringContentLength="500000000"
maxArrayLength="500000000" maxBytesPerRead="500000000" maxNameTableCharCount="500000000" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="DataController">
<endpoint address="http://vs0092:81/DataController/DataController.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IDataController"
contract="SMS.RC.IDataController" />
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
クライアント側の app.config は次のようになります
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IDataController"
openTimeout="00:05:00"
sendTimeout="00:05:00"
receiveTimeout="00:05:00"
closeTimeout="00:05:00"
maxBufferPoolSize="500000000"
maxReceivedMessageSize="500000000"
maxBufferSize="500000000">
<readerQuotas maxDepth="500000000"
maxStringContentLength="500000000"
maxArrayLength="500000000"
maxBytesPerRead="500000000"
maxNameTableCharCount="500000000" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://vs0092:81/DataController/DataController.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataController"
contract="FBCDataController.IDataController" name="BasicHttpBinding_IDataController" />
</client>
</system.serviceModel>
それで、あなたは問題を見ますか?私はそうではなく、この質問を解決するために本当に多くの努力を払ってきましたが、この時点で、私のWCFは方法が小さすぎると思います。サービスのバインディングが適用されないのはなぜですか?? それは良い ServiceBehavior を実装することの問題でしょうか? サービスの正しい名前を調べる方法はありますか? (私が読んだのは、名前空間を含むフルネームでなければなりません)
どうもありがとう、トム