私たちのチームは、5分以上の投資であるため、ソリューションのサービス参照を更新することを恐れ始めています。すべてがVisualStudioのWebサーバー内のローカルホストです。
私の質問は-この問題が何であるかをどのようにデバッグできますか?終わったら問題なく動作しますが、長い遅延はおかしいです。どこを見ればよいかわからない場合は、おそらくこれを解決できます。
私たちのチームは、5分以上の投資であるため、ソリューションのサービス参照を更新することを恐れ始めています。すべてがVisualStudioのWebサーバー内のローカルホストです。
私の質問は-この問題が何であるかをどのようにデバッグできますか?終わったら問題なく動作しますが、長い遅延はおかしいです。どこを見ればよいかわからない場合は、おそらくこれを解決できます。
.suo ファイルは、頻繁に更新されるため、おかしくなっている可能性があります。これは、ソースを調べることで確認できます。この場合は、.suo を削除して参照を更新できます。他のユーザー設定を忘れた場合に備えて、バックアップを作成することをお勧めします。
もう 1 つのオプションは、サービスの WSDL が非常に大きくなりすぎており、弾丸を噛む必要があるというものです。
影響を軽減したい場合は、計画と呼ばれるあまり知られていない秘密を使用して、サービス担当者に契約を結び付けてもらいます。;-) 正直なところ、VS で発生する多くの問題の根本的な原因は、多くの場合、不十分な計画です。
Visual Studio でsvcutil
代わりに使用すると生成時間が短縮されることに気付きましたが、生成されるコードが若干異なる場合があります (詳細は後述)。Add Service Reference
職場では、約 100 のサービス操作と 100 のサービス コントラクトで構成される WCF サービスがあり、Visual Studio 2012 でのプロキシ生成は、サービスによって公開された WSDL から開始され、約 7 分かかります。次に、svcutil
(オプションなしで)使用しようとしましたが、生成には約2分しかかかりませんでした。
/enableDataBinding
サービス参照 ( 、/serializable
、/namespace:*,myns
、/syncOnly
および) で構成されているのと同じ特性に一致するようにいくつかのオプションを追加する必要がcollectionType:System.ComponentModel.BindingList'1
あり、このオプションを使用すると、生成時間が 3 分半に増加しました。全体的に、プロキシの生成は桁違いに高速ではありませんが、少なくとも生成時間は半分に短縮されるはずです。
私の経験では、2 つの生成方法には、指摘したいいくつかの違いがあります。
Visual Studio はdatasource
ファイルを生成します (オブジェクト データソースを Windows フォーム プロジェクトに追加するときに Visual Studio によって生成されるファイルです。この SO スレッドも参照してください)。svcutil
それらを生成するオプションはありません。初めてコントラクトにデータバインドする必要があるときは、Visual Studio でファイルを生成する必要があるため、大きな問題にはなりません。余談ですが、プロキシが別のアセンブリでコンパイルされている場合、参照プロジェクトは生成されたdatasource
ファイルを再利用できませんでした。これらのファイルはアセンブリに含まれておらず、とにかく再生成されるからです。
サービス コントラクトのConfigurationName
プロパティは異なる可能性があります。これは、属性値を生成する際に 2 つの生成メソッドが対象の名前空間を異なる方法で考慮するためと思われます。生成された を使用しないため、これは私たちの場合の問題app.config
です。app.config
ただし、これは、新しい値に一致するように を変更するかConfigurationName
、生成されたプロキシ ソースのプロパティを(自動的に) 変更することで、簡単に管理できます。
svcutil
すべてのExtensionData
グリッドが. 前の問題と同様に、これは のようなツールを使用して属性を追加することで処理できます(たとえば、この回答に含まれる PowerShell スニペットを使用しました)。Browsable(false)
ExtensionData
sed
Web 参照の更新に時間がかかる問題がありました。私は時代に夢中でした。1時間以上。
一部の同僚は、ワークスペース パスを追加して Windows Defender から除外するように指示し、問題を解決しました。