2009-07-12 27 views
0

現在、WCFで実装されたWebサービスのクライアントとしてSilverlight 3.0と標準の.NETアプリケーションの両方を使用する必要があるソリューションを開発中です。 Silverlightクライアントによって消費されるWebサービスの部分は二重化機能を必要とするため、私は自分のサービスの1つのエンドポイントで(かなり新しい)PollingDuplexBindingElementを使用しています。しかしPDBEはSilverlightでしかサポートされていないので、WSDualHttpBindingをバインディングとして使用する他のクライアントのために、私のサービスに第2のエンドポイントを追加しました。これらの他のクライアントは実際にはデュプレックスは必要ありませんが、サーバー側の契約の一部にはデュプレックスが必要なため、WSHttpBindingのような標準のシンプレックスバインディングは機能しません。WCFでのエラーメッセージWSDualHttpBinding:サービスを自動的にデバッグできません

ので(HTTPになどHTTP 200、500の障害応答を書き換えるなど、)奇妙なSilverlightのWCFの要件を、私はカスタムのServiceFactoryクラスを介して自分のサービスを初期化しています、の主要部分は次のようになります。

protected override void InitializeRuntime() 
    { 

     // Add the WSDualHttpBinding. 
     // This should listen at http://<servername>/RoomService.svc/wsdual 
     WSDualHttpBinding wsDualBinding = new WSDualHttpBinding(WSDualHttpSecurityMode.None) 
     { 
      MessageEncoding = WSMessageEncoding.Text, 
      TextEncoding = new System.Text.UTF8Encoding() 
     }; 
     this.AddServiceEndpoint(
      typeof(IRoomService), 
      wsDualBinding, 
      "wsdual"); 

     // Add the PollingDuplexBinding 
     // This should listen at http://<servername>/RoomService.svc 
     PollingDuplexBindingElement pollingDuplexBindingElement = new PollingDuplexBindingElement() 
     { 
      // I'm not sure that these values are the best. They're an initial guess. 
      ServerPollTimeout = TimeSpan.FromSeconds(90), 
      InactivityTimeout = TimeSpan.FromMinutes(30) 
     }; 

     CustomBinding pollingDuplexBinding = new CustomBinding(
          pollingDuplexBindingElement, 
          new BinaryMessageEncodingBindingElement(), 
          new HttpTransportBindingElement()); 

     this.AddServiceEndpoint(
      typeof(IRoomService), 
      pollingDuplexBinding, 
      "").Behaviors.Add(new SilverlightFaultBehavior()); 

     // Add the MetaData Exchange binding. 
     this.AddServiceEndpoint(
      typeof(IMetadataExchange), 
      MetadataExchangeBindings.CreateMexHttpBinding(), 
      "mex"); 

     base.InitializeRuntime(); 
    } 

(やや驚くほど)すべてが機能します。 Silverlight/PollingDuplexクライアントはすべて、きちんとしたコールバックを取得します(SL 2.0よりもはるかに優れています).Net/WSDualHttpクライアントは、すべてサーバーと通信できます。

1つを除いて。アプリケーションをデバッグしようとすると、WSDualHttpで最初のシンプレックスコールにヒットしたときに、Visual Studioが次のダイアログボックスを表示します。

"MyCompany.Serviceを自動的にデバッグできません。通常、Webサーバーでデバッグが有効になっていないことを示します。詳細については、ヘルプを参照してください。

エラーメッセージはであり、正確にはではありません。 デュプレックス(一方向)コールではWebサービスへのステップスルーデバッグができますが、シンプレックス(双方向)コールでは実行できません。

さて、もちろん、私はつまり、私のweb.configファイルが適切に設定されていることを確認するためにチェックしました、それはそれで次の行を持っています

<compilation debug="true"> 

私はこれに対して私の頭を叩いてきました私が問題を実証しているかなり簡単なレプロ(利用可能here)をまとめるのに十分な長さ。私が知る限りでは、IIS内でWSDualHttpBindingを使用したときに表示され、そのサービスに対して標準のシンプレックスコールを作成しようとします。しかし理想的ではなかったクライアントで重複するオブジェクトモデルのコスト、で -

私の最初の問題を回避するには、すべてがうまく働いていた、その時点でサービスのシンプレックス個から二重をオフに分割することでした。だから私はすべてを1つのサービスに戻しましたが、何かをデバッグできないのは確かに苦痛です。

誰か他の人がこれにぶつかったり、提案がありますか?

FWIW、MSDNにこの同じ質問を投稿しましたが、MS Connectでバグを開こうとしましたが、もう一度、その四半期のヘルプはありません。

アイデア?

+0

私は結局のところ、IIS(6)でWSDualHttpBindingを使用し、自己ホストサービスでNetTCPを使用するように切り替えました。デバッグに問題はありません。 –

答えて

関連する問題