サービス参照エラー:サービス参照のコードを生成できませんでした


131

私はWindowsサービスソリューションを持っていて、VS2010でHermes(オープンソースebmsメッセージサーバー)Webサービスにサービス参照を追加しようとしています。

そのURLを使用してWebサービスを見つけることができますが、Service参照を設定しようとすると、Visual Studioで次のエラーが発生します。

Error 8 Custom tool error: Failed to generate code for the service reference 'testService'.  Please check other error and warning messages for details. C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler


Warning 6 Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 7 Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:binding[@name='EbmsSoapHttpStatusQuery']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:service[@name='EbmsMessageStatusQuery']/wsdl:port[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

Warning 5 Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter
Error: Schema with target namespace 'http://service.ebms.edi.cecid.hku.hk/' could not be found.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://service.ebms.edi.cecid.hku.hk/']/wsdl:portType[@name='EbmsStatusQuery'] C:\Users\Admin\documents\visual studio 2010\Projects\MyProject\MyProject.MessageHandler\Service References\testService\Reference.svcmap 1 1 MyProject.MessageHandler

一部の調査では、ディレクトリ(おそらくc:\ windows \ temp)へのアクセス権がないため、svcutil.exeがプロキシを構築できなかったことが原因であると示唆されているようです。さまざまなアクセス許可を割り当てようとしましたが、どのユーザーがアクセス許可を必要としているか、それが単なるニシンかどうかはわかりません。

任意のアイデアをいただければ幸いです。

ありがとう

回答:


303

すべての参照されたアセンブリの再利用タイプのチェックを、サービス参照の構成オプションからオフにする必要があります

詳細はこちらをチェック


3
または、「参照されるアセンブリでの型の再利用」が実際に必要な場合は、その目的のために特別に作成されたクラスライブラリプロジェクトからサービス参照を追加できます。追加情報について返信を確認してください。
Florin Dumitrescu 2013

「再利用タイプ」のチェックを外さずに解決策を求めていましたが、うまくいった解決策を見つけることができました私の答えをここで確認してください
Shahin Dohan

このようなことをする代わりに、参照されているものをすべて盲目的に使用する代わりに、WCFクライアントが依存するアセンブリを使用します。問題のチェックボックスをオフにするよりも注意が必要で時間がかかる可能性がありますが、このソリューションの方が適切なソリューションだと思います回答としてマークされました。
Oscar Guillamon、

また、あなたのプロジェクトは、読むOnly..Thisは私の問題だったていないことを確認します。..
arihanthジャイナ教は、

126

サービス参照を右クリックして選択します Configure Service Reference...

サービス参照の構成

次にチェックを外します Reuse types in referenced assemblies

再利用タイプ

をクリックしてOK、ソリューションをクリーンアップして再構築します。


2
参照されたアセンブリを再利用する必要がある場合はどうなりますか?プロジェクトがあり、そのチェックボックスがオンになっています。更新は私のマシンで機能しますが、同僚のマシンでは機能しません...手がかりはありますか?
Ricardo Appleton

これは、プロジェクトでv4.6.1からv4.7にアップグレードしたときに発生しました。これはそれを修正しました。
マイクフリン

17

Visual Studio 2012を使用してASP .Net MVC 4.0プロジェクトからWebサービスのクライアントを生成しようとしたときにも、同様のエラーが発生しました。

問題の原因は、クライアントを生成しようとしていたプロジェクトがアセンブリを参照していて、そのアセンブリが参照されていない別のアセンブリに依存しているという事実にあるようです。

サービス構成で「参照アセンブリでの型の再利用」が有効になっている場合、サービスジェネレーターは参照されているすべてのアセンブリを検査して、再利用可能な型のリストを取得している可能性があります。参照されているアセンブリの1つが、使用できない別のアセンブリを参照しているという事実が、おそらくジェネレーターの失敗の原因となっています。

サービス構成から「参照されたアセンブリでタイプを再利用する」のチェックを外すと、上記の問題は解決しますが、副作用があります。再利用タイプオプションは理由により存在し、場合によっては、サービスを消費するコードでの不要なキャストを回避します。

たとえば、サービス自体がWCFを使用して構築されており、その内部のいくつかのメソッドパラメーターのタイプがSystem.Guidである場合、タイプの再利用オプションが無効になっていると、生成されたクライアントの文字列に変換されます。

私が好むことを代替再利用するタイプを無効にするには、特にその目的のために作成したクラスライブラリプロジェクトからサービス参照を追加することです。覚えておくべきことの1つは、サービスに関連するすべての構成をクラスライブラリのapp.configからスタートアッププロジェクトの構成ファイルにコピーすることです。

サービスクライアントで再利用する必要があるローカルアセンブリで定義された型がある場合、それらのアセンブリは、上記のクラスライブラリプロジェクトからすべての依存関係とともに参照されるだけです。


変だ。バインディングをHttpBindingからNetNamedPipeBinding(mexエンドポイントも追加)に変更し、これをクライアントアセンブリAに追加しました。WCFサービスを参照する新しいクラスライブラリBを作成しました。次に、BをAへの参照として追加すると、魔法のようにすべてが再び機能します。非常に奇妙な。解決策をありがとう
シトロナス2014

3

http://uliasz.com/2011/06/wcf-custom-tool-error-failed-to-generate-code-for-the-service-reference/#comment-1647

上記の記事に感謝します。

私の場合、VS.Net 2008のWPFプロジェクトでこの問題が発生しました。この記事を読んだ後、Webサービスで使用されているアセンブリが、クライアントで使用されているアセンブリの異なるバージョンであることに気付きました。

クライアントでアセンブリを更新した後、それは正常に動作します。


1

これはWSDLのエラーが原因であり、WSDL を調査しないとこれ以上コメントできないため、問題を推測するのは非常に困難です。したがって、WSDLを共有できる場合は、共有してください。

私が言えることは、WSDLにスキーマが欠落しているように見えることです(ターゲット名前空間 'http://service.ebms.edi.cecid.hku.hk/'を使用)。include命令が無視される場合の問題とスキーマの異なる処理について知っています。

一般に、MicrosoftのWebサービスの実装は非常に優れているので、Webサービスは危険なWSDLを送り返していると思います。


Aliostadに感謝します。仕事から出たときに、WSDLを試して共有します。
jheppinstall 2010

0

Silverlight 5(VS2012)でも同じエラーが発生する

以下への参照を削除することもできます。

  • System.ServiceModel.DomainServices.Client
  • System.ServiceModel.DomainServices.Client.Web

サービス参照を更新したら、必ずそれらを再度追加してください。


0

上記のように、いくつかの異なる問題が考えられます。WCFライブラリの.DLLがクライアントプロジェクトへの参照として追加されていることがわかりました。これにより、オブジェクトの解決に関する問題が発生し、コード生成ステップによってファイルが「空」になりました。「型の再利用...」のチェックを外すと答えのように思えるかもしれませんが、実際の型のプロキシであるオブジェクト型の追加の定義が新しい名前空間に作成され、それによってあらゆる種類の「互換性」の問題が発生します。それらのタイプの使用。タイプを「非表示」にしたい場合のみ、このオプションをチェックしてください。

タイプを非表示にすることは、「DLL」タイプの依存関係を別のプロジェクトから隔離しようとしているプロジェクトに「漏らしたくない」場合に適しています。WCFライブラリプロジェクトのDLLがクライアントプロジェクト参照に忍び込む場合、タイプ定義もDLLにあるため、この問題はあらゆる種類の奇妙な副作用で発生します。


0

同じ問題に直面し、管理モードでVisual Studioを実行することで解決


0

VS2015 ProfessionalでVS2010 WCF + Silverlightソリューションをアップグレードするときにこの問題が発生しました。Silverlight 4からSilverlight 5に自動的にアップグレードするほかに、サービス参照の再利用チェックボックスの値が変更され、生成に失敗しました。


0

このエラーが発生した場合、「再利用タイプ」が常に問題になるとは限りません。

古いサービスへの参照を追加する場合は、[詳細]をクリックして、[Web参照の追加]をクリックします。これでwsdlにリンクすると、すべてが機能するはずです。


0

アセンブリの再利用チェックボックスを外さずにこれを修正したい場合、これは私にとってうまくいきました:

  • 再利用する参照アセンブリを削除します
  • プロジェクトのすべてのbinフォルダーを削除する
  • サービス参照の更新
    • 「指定された参照アセンブリでのタイプの再利用」を維持
  • エラーを修正するために、アセンブリへの参照を再度追加します
  • サービス参照を再度更新


-1

サービス参照を更新しようとしたときにこの問題が発生しましたが(サービス参照を追加したときにのみエラーが表示されます)、アセンブリの再利用チェックボックスを削除したくありませんでした。

私のために働いたのは次のとおりです:

  • 再利用したい参照アセンブリを削除する
  • サービス参照の更新
  • 「指定された参照アセンブリでのタイプの再利用」を維持
  • エラーを無視してください、それは参照が欠落しているためです!
  • エラーを修正するために、アセンブリへの参照を再度追加します
  • サービス参照を再度更新

出来上がり、実際に更新され、生成されたコードのすべてを削除しようとしなくなりました。

タイプの再利用機能をあきらめる準備がほぼできていた...

編集: svcutilはx64にバグがあるため、ビルド構成がAnyCPUまたはx86であることも確認してください。

反対投票者へ:うまくいかなかった場合は申し訳ありませんが、なぜうまくいったのかはわかりませんが、うまくいきました。そのときに問題を解決するために何か他のことをしたかもしれませんが、今は知る方法がありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.