1

Silverlight 3 コントロールによって消費される wcf サービスがあります。Silverlight クライアントは、次のように、コントロールの初期化パラメーターから実行時に構築される basicHttpBindinging を使用します。

public static T GetServiceClient<T>(string serviceURL)
{
    BasicHttpBinding binding = new BasicHttpBinding(Application.Current.Host.Source.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase)
            ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None);
    binding.MaxReceivedMessageSize = int.MaxValue;
    binding.MaxBufferSize = int.MaxValue;

    binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;

    return (T)Activator.CreateInstance(typeof(T), new object[] { binding, new EndpointAddress(serviceURL)});
 }

サービスは Windows セキュリティを実装します。結果セットが数千行に増加し、その時点で HTTP 401.1 エラーが受信されるまで、呼び出しは期待どおりに返されていました。

サービスの HttpBinding は、10 分の closeTime、openTimeout、receiveTimeout、および sendTimeOut を定義します。

結果セットのサイズを制限すると、呼び出しは成功します。

Fiddler からの追加の観察: Method2 を変更してより小さな結果セットを返す (そして問題を回避する) 場合、コントロールの初期化は 4 つの呼び出しで構成されます。

  1. Service1/Method1 -- 結果:401
  2. Service1/Method1 -- 結果:401 (この時間のヘッダーには、「Authorization: Negotiate TlRMTV...」という要素が含まれています。
  3. Service1/Method1 -- 結果:200
  4. Service1/Method2 -- 結果:200 (1.25 秒)

Method2 がより大きな結果セットを返すように構成されている場合、次のようになります。

  1. Service1/Method1 -- 結果:401
  2. Service1/Method1 -- 結果:401 (この時間のヘッダーには、「Authorization:Negotiate TlRMTV...」という要素が含まれています。
  3. Service1/Method1 -- 結果:200
  4. Service1/Method2 -- 結果:401.1 (7.5 秒)
  5. Service1/Method2 -- 結果:401.1 (15ms)
  6. Service1/Method2 -- 結果:401.1 (7.5 秒)
4

1 に答える 1

1

問題は、サービス動作の構成でした。これはトリックをしました:

<behavior name="SRMS.Services.GraphicPointServiceBehavior">
    <serviceMetadata httpGetEnabled="true"/>
 <serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

Daniel Bergsten の投稿を参照してください:詳細情報

于 2010-05-28T23:13:18.500 に答える