ソリューションでWCFサービスライブラリプロジェクトを作成し、これへのサービス参照があります。クラスライブラリのサービスを使用しているので、クラスライブラリに加えて、WPFアプリケーションプロジェクトからの参照があります。サービスは簡単にセットアップできます-非同期サービス機能を取得するために変更されただけです。
サービス参照を更新するまで、すべてが正常に機能していました。失敗したので、最終的にロールバックして再試行しましたが、それでも失敗しました!つまり、サービス参照の更新は、変更を加えずに失敗します。なぜ?!
私が得るエラーはこれです:
Custom tool error: Failed to generate code for the service reference
'MyServiceReference'. Please check other error and warning messages for details.
警告はより多くの情報を提供します:
Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the
following types. Only matching types can be valid references:
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
同様の警告が2つあります。
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://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']
そして同じこと:
Custom tool warning: Cannot import wsdl:port ..
これはすべて紛らわしいと思います。サービスリファレンスから取得したものを除いて、クライアント側のダッシュボードにPatientクラスがありません。では、それはどういう意味ですか?そして、なぜそれが突然表示されるのですか?覚えておいてください:私は何も変更しませんでした!
さて、これに対する解決策はここにありましたが、これが何を意味するのかについての説明はありません。そう; サービスの[サービス参照の構成]で、[参照されるアセンブリのタイプを再利用する]チェックボックスをオフにします。今すぐ再構築すると、すべて問題なく正常に動作します。しかし、私は本当に何を変えましたか?これは私のアプリケーションに影響を与えますか?そして、いつこれをオフにする必要がありますか?DataContractを設定したタイプを再利用したいのですが、それ以上は使用しません。これをチェックしなくても、引き続きアクセスできますか?