1

データソースを公開するために使用しているWCFサービスがあります(EFモデルを介して接続されています)。何らかの理由でエンドポイントが応答を停止しました。

最後の変更まで、アプリの起動時にデータを取得していました。私は現在、この上にサブスクライブ/パブリッシュ モデルを追加する作業を行っているため、何かが WCF サービスにヒットしてデータが変更されたときにイベントをスローできます (クライアント側で実行できますが、他のユーザーをキャッチすることはできません)。変わります)。

私はマイクロソフトの例に従ってきました: http://msdn.microsoft.com/en-us/library/ms752254.aspx適切な装飾をサービス インターフェイスと実装に追加し、サブスクライブ/サブスクライブ解除の OperationContract などを追加しました。サービスを起動しようとして接続できないよりも。

クライアントからサービス参照を削除し、再接続しようとしました。ここに奇妙なことがあります:

1) WCF サービスがビルドされ、開発者ホストでスピンアップします。2) Web.Config ファイルは変更されていません。3) vs 2012 のサービス参照の追加の [サービスの検出] オプションでサービスが表示されますが、検出されたサービスを実際に受け入れようとすると、「アドレスからメタデータをダウンロード中にエラーが発生しました。

サービスを検出して参照として追加できない方法がわかりません。自分で情報を追加したかどうかはわかりますが、見つかりました。

パブリッシング機能を追加する一環として、インターフェイスに SessionMode.Required タグを追加しました。WCF がセッションをどのように処理するのかよくわかりません。また、コーディングの他の場所でセッションを処理する必要はありませんでした (通常、ソースからデータをプルします)。ローカルで処理するよりも、過去に作成する必要があったタイプのツールだったので、サーバー側で状態を保持する必要はありませんでした)。

何か案は?

私のサービスのweb.config:


<connectionStrings>
  <add name="TaskModelContainer" connectionString="metadata=res://*/TaskModel.csdl|res://*/TaskModel.ssdl|res://*/TaskModel.msl;provider=System.Data.SqlClient;provider

connection string="data source=winhacker\sqlexpress;initial catalog=TaskDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>

注:ファイルのほとんどのフォーマットで何が起こっているのかがプレビューに表示されないことに注意してください. ファイルを表示したい場合は、「編集」をクリックして、コピーしたソースが表示されているようですが、フォーマットが少し変です。

4

1 に答える 1

4

このエラーが発生したほとんどの場合、問題はサーバー側のシリアル化の問題でした。WCFはメタデータ検出フェーズ中にこれに関する例外をスローしますが、VSはこの例外を表示しません。

この問題のトラブルシューティングを行うには、診断セクションをに追加しweb.configてWCF情報をファイルにキャプチャし、svclogMicrosoftのService Trace Viewerを使用してログを調べ、スローされた実際の例外を検出する必要があります。

セクションは次のweb.configようになります。

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel"
              switchValue="Information, ActivityTracing"
              propagateActivity="true">
        <listeners>
          <add name="traceListener"
              type="System.Diagnostics.XmlWriterTraceListener"
              initializeData="c:\log\WebTrace.svclog"  />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

レベルで追加され<configuration>ます。

構成を追加し、指定したディレクトリーが存在することを確認したら、サービス参照を再度追加してみてください。これにより、指定されたsvclogファイルが生成されます。

そのマシンにVSがインストールされている場合は、Windowsエクスプローラーでファイルをダブルクリックするだけで、ツールでログが自動的に開かれるはずです。

ログが開いたら、左側のペインでアクティビティのリストを確認し、最初のアクティビティのリストを赤でクリックします。次に、右上のペインで、最初に赤で表示されているものを選択します(または、例外が表示されますが、どちらかを忘れています)。次に、それをクリックして、右下のペインの例外情報を含む詳細を表示できます。

于 2013-01-14T01:43:12.020 に答える