13

私は Visual Studio 2008 を使用しており、WCF サービスに対して WCF クライアントが動作しています。どちらも同じ Visual Studio ソリューションにあります。WCF コントラクトに変更を加えた後、コントラクトに加えられた変更がプロキシにも反映されるように、クライアントのサービス参照を更新したいと考えています。

私の問題は、プロキシ コードが再生成されないことです。

サービス参照の更新を選択すると、次のことが起こります。

  1. 「サービス参照 '参照名' を更新しています」というタイトルのダイアログが表示されます。このダイアログには進行状況バーがあります。
  2. プログレスバーが移動し、ダイアログのステータス テキストが「構成の更新中」に変わります。
  3. プログレスバーがもう少し移動し、ステータス テキストが「構成の更新が完了しました」に変わります。

ダイアログには、私が期待する「Generating \something\」というテキストが表示されません (正確な言葉遣いを思い出せません)。

サービス参照を削除して再度追加すると、プロキシが正しく生成されます。先ほどと全く同じ設定でサービスを追加しているので、クライアント側のサービス参照設定を変更しても解決できる問題ではないと思います。

問題の可能性があると思われることの 1 つは、app.config でデフォルトの wsHttpBindings の名前を変更したことです。デフォルトのエンドポイントの名前も変更しました。この背後にある理由は、複数のエンドポイントが必要であり、「some-default-name」という名前のエンドポイントと自分の名前のエンドポイントを持つことは混乱を招くためです。

サービスを削除して再度追加する際の問題は、Visual Studio が (とりわけ) app.config に新しいバインディングを追加することです。

この問題を以前に見た人はいますか?誰かがそれに対する解決策を知っていますか?

4

12 に答える 12

8

この問題が発生した場合、通常は次のいずれかのエラーです。

  • コントラクトのサイズが大きくなり、WCF 構成で転送できないほど大きくなりました。
  • 新しいクラスが WCF インターフェイスに追加されましたが、そのクラスはシリアル化可能としてマークされていません。
  • コードのビルドを停止するコンパイル エラーがあるため、古い dll が使用されます。
于 2009-11-03T15:07:13.827 に答える
5

次の条件でこの問題に遭遇しました。

  1. ワークステーションは Active Directory ドメインに接続されています (ほぼすべてが Windows 認証を使用しています)。
  2. 更新しようとしているサービス参照は localhost でホストされ、IIS Express で実行されています (したがって、アプリケーション プール ユーザーは開発者の個人用ドメイン ユーザー アカウントとして実行されています)。
  3. 私よりも最近、別の開発者がプロ​​ジェクトへの参照を追加または更新しました。

この問題を回避する方法を見つけた唯一の方法は、そのサービス参照の configuration.svcinfo ファイルを編集することです (Visual Studio で表示するには、プロジェクトのすべてのファイルを表示する必要があります)。次のセクションを見つけます。

userPrincipalName value="user@domain.com"

ユーザーを自分のドメインユーザーに変更します。ファイルを保存した後、別の開発者がサービス参照を更新するまで (おそらく同じ回避策を使用して)、問題なく参照を更新できます。残念ながら、この問題に対する恒久的な解決策を見つけることができませんでした。

于 2014-02-04T17:15:21.920 に答える
4

私の場合、問題は、前の開発者がローカルホストではなく自分のマシン名を使用してサービス参照を追加していたことでした。そのため、Visual Studioに更新するように指示すると、変更が加えられていない彼のマシンに接続されました。サービス参照ファイルを変更し、彼のマシン名をlocalhostに置き換えたところ、参照を更新できました。

于 2012-10-15T21:28:43.533 に答える
2

私の問題は、同じ名前のメソッドが 2 つあることでした。すべてが正常に構築されましたが、サービス参照を更新できませんでした。WCF サービスだけを開始しようとすると、エラーが表示されます。

于 2011-08-11T11:03:27.827 に答える
1

サービスをアクティブなプロジェクトとして強調表示し、F5 キーを押して VisualStudio で実行すると、サービス テスト アプリで起動します。デバッグを停止します。次に、サービス参照を更新してみてください-うまくいきました。

于 2014-10-07T11:32:00.607 に答える
1

私もこの問題を抱えていました。サービス参照を削除し、再度作成しました。

于 2014-11-20T08:50:56.930 に答える
0

私は同じ問題を抱えていました.これはGIT Merge Conflictが原因でした.csprojファイルから次のコードがありませんでした.

   <ItemGroup>
    <None Include="Service References\<SERVICE NAME>\Reference.svcmap">
      <Generator>WCF Proxy Generator</Generator>
      <LastGenOutput>Reference.cs</LastGenOutput>
    </None>
  </ItemGroup>

これを Reference.svcmap の行に追加しました

于 2015-11-09T10:20:50.030 に答える
0

この解決策が少し遅れていることは知っていますが、投稿された解決策を試しても成功しなかった後、これはうまくいきました:

WebService を作成すると、サービス参照として参照する .dll ファイルが生成されます。この .dll は (よく知られているように) .SVC ファイルに変更を加えるたびに再作成されるわけではありません。これは、Web サービスの .dll ファイルの date modified プロパティを表示するとわかります。私の場合は 3 時間経過していました。

私の解決策は、サービス連絡先に適切な変更を加えて保存し、プロジェクトを再構築することでした。これにより、サービス連絡先ファイル (.svc) に加えた変更を反映したすべての .dll が再作成されます。

この後、クライアント アプリでサービス参照を更新すると、変更が明らかになります。

  • スペード
于 2014-06-18T01:59:25.230 に答える
0

私も同じ問題を抱えていました。一部のデータ コントラクトを変更しました。「サービス参照の更新」を試みましたが、変更が見られませんでした。サービスを削除して再追加しました。クライアントでコードを書くときは、まだ変更が見られませんでした。Reflector でクライアントを開き、サービス タイプが変更されたことを確認しました。では、なぜ Intellisense はまだ古いプロパティを表示していたのでしょうか? Visual Studioを再起動すると、変更が最終的にインテリセンスに表示されました。

于 2015-05-27T18:03:42.550 に答える