136

Windowsサービスソリューションがあり、VS2010でHermes(Opensource ebms message server)Webサービスへのサービス参照を追加しようとしています。

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

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がプロキシを構築できなかったことが原因であると示唆しているようです。さまざまなアクセス許可を割り当ててみましたが、どのユーザーが許可を必要としているのか、それとも単なるニシンなのかわかりません。

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

ありがとう

4

13 に答える 13

311

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

詳細はこちらをご確認ください

于 2011-08-22T08:53:46.927 に答える
128

サービス参照を右クリックして、Configure Service Reference...

サービスリファレンスの構成

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

再利用タイプ

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

于 2013-10-17T14:58:42.677 に答える
18

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

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

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

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

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

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

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

于 2013-04-03T12:20:44.350 に答える
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サービスで使用されるアセンブリがクライアントで使用されるアセンブリのバージョンとは異なることに気付きました。

クライアントでアセンブリを更新した後は、問題なく動作します。

于 2013-03-07T14:09:55.773 に答える
2

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

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

一般的に、MicrosoftのWebサービスの実装はかなり良いと思ったので、Webサービスは危険なWSDLを送り返していると思います。

于 2010-10-20T12:19:37.373 に答える
1

Visual Studioを再起動すると、うまくいきました。VS2015を使用しています。

于 2018-07-05T21:22:37.960 に答える
0

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

次の参照を削除することもできます。

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

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

于 2013-02-01T06:07:00.943 に答える
0

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

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

于 2014-06-17T16:37:55.527 に答える
0

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

于 2015-06-09T21:41:14.940 に答える
0

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

于 2015-07-22T16:02:32.893 に答える
0

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

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

于 2016-06-13T11:37:12.987 に答える
0

アセンブリの再利用チェックボックスをオフにせずにこれを修正したい場合は、これが私のために働いたものです:

  • 再利用する参照アセンブリを削除します
  • プロジェクトのすべてのbinフォルダーを削除します
  • サービスリファレンスを更新
    • 「指定された参照アセンブリでタイプを再利用する」を保持します
  • エラーを修正するには、アセンブリへの参照を再度追加します
  • サービスリファレンスを再度更新する
于 2018-01-05T08:11:00.023 に答える
-1

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

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

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

出来上がり、今では実際に更新され、生成されたコードをすべて削除しようとはしません。

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

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

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

于 2017-05-18T10:17:30.437 に答える