5

WCF サービスを介してサーバー側の ADO.Net データ エンティティと通信する Silverlight アプリケーションがあります。実際、私は複数の WCF サービスを使用して、3 つの異なるデータ ADO.Net データ エンティティと通信しています。私はもともとこのプロジェクトを Visual Studio 2010 で構築していましたが、最近、約 1 週間前に Visual Studio Professional 2012 (試用版) に移行しました。最初はすべてが正常に機能/移植され、約1時間前までサービスに問題はありませんでした. 1 時間も経たないうちに、コードでこれらと同じ WCF サービスを文字通り使用していました。ただし、xml 文字列をデータベースに挿入するメソッドを追加すると、次のエラーが発生しました。

Content Type text/xml; charset=utf-8 was not supported by service . The client and service bindings may be mismatched.

しかし、バインディングを確認したところ、ServiceReferences.ClientConfig ファイルからわかる限り、basicHttpBinding でした。私は解決策を探し回りましたが、サービス参照を削除してVisual Studioを再起動した後にそれを読むことを提案した唯一の解決策が見つかったので、最終的にそれを試しましたが、追加したメソッドを削除した後でも、このエラーが発生しますクライアントにサービス参照を追加しようとしました:

Warning 6   Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Exception has been thrown by the target of an invocation.
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IXMonitorXMLDataService']    C:\Users\ckarrs\Documents\Visual Studio 11\Projects\SL_xMonitor_Frontend_RefactorV1_Backup82212\SL_xMonitor_Frontend_RefactorV1\Service References\XMonitorXMLDataService\Reference.svcmap  1   1   SL_xMonitor_Frontend_RefactorV1


Warning 7   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='IXMonitorXMLDataService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_IXMonitorXMLDataService']    C:\Users\ckarrs\Documents\Visual Studio 11\Projects\SL_xMonitor_Frontend_RefactorV1_Backup82212\SL_xMonitor_Frontend_RefactorV1\Service References\XMonitorXMLDataService\Reference.svcmap  1   1   SL_xMonitor_Frontend_RefactorV1

Warning 8   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://tempuri.org/']/wsdl:binding[@name='BasicHttpBinding_IXMonitorXMLDataService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='XMonitorXMLDataService']/wsdl:port[@name='BasicHttpBinding_IXMonitorXMLDataService']  C:\Users\ckarrs\Documents\Visual Studio 11\Projects\SL_xMonitor_Frontend_RefactorV1_Backup82212\SL_xMonitor_Frontend_RefactorV1\Service References\XMonitorXMLDataService\Reference.svcmap  1   1   SL_xMonitor_Frontend_RefactorV1

Warning 9   Custom tool warning: No endpoints compatible with Silverlight 5 were found. The generated client class will not be usable unless endpoint information is provided via the constructor.  C:\Users\ckarrs\Documents\Visual Studio 11\Projects\SL_xMonitor_Frontend_RefactorV1_Backup82212\SL_xMonitor_Frontend_RefactorV1\Service References\XMonitorXMLDataService\Reference.svcmap  1   1   SL_xMonitor_Frontend_RefactorV1

Warning 10  Custom tool warning: Exception has been thrown by the target of an invocation.  C:\Users\ckarrs\Documents\Visual Studio 11\Projects\SL_xMonitor_Frontend_RefactorV1_Backup82212\SL_xMonitor_Frontend_RefactorV1\Service References\XMonitorXMLDataService\Reference.svcmap  1   1   SL_xMonitor_Frontend_RefactorV1

私はとても混乱しています。他のサービス参照は同じままで、このサービスに追加して参照を更新しようとするまで、このサービスは完全に機能していました。これは VS 2010 と 2012 の間の互換性の問題ですか? MSDN Web サイトによると、VS 2012 は VS 2010 と下位互換性があり、すべてが正常に移行されたようです。どんな助けでも大歓迎です、私は当惑しています。追加情報が必要な場合はお知らせください。

4

1 に答える 1

1

私は WCF の専門家ではありませんが、.net Web サービスと WSDL については知っているので、情報が WCF に関連していない場合は修正してください。

エラーは次のとおりですAn exception was thrown while running a WSDL import extension。これは、VS がサービス WSDL ファイルを正しく読み取ることができず、サービス呼び出しを行うために必要なプロキシ クライアント クラスを作成できなかったことを意味します。

Web サービスへの参照を含む .net アプリケーションは自動的に WSDL を取得しますが、期待どおりでない場合があるため、これが問題を引き起こす可能性があります。WSDL ファイルの生成方法を構成する方法はありますが、簡単ではありません (詳細はこちらを参照) 。

?wsdlブラウザでサービス URL の後に query を入力して WSDL ファイルを取得し、その内容を確認してください。サーバーがプロキシ サーバーの背後にある場合、これが問題を引き起こす可能性があります。WSDL ファイルの末尾に、「バインディング」、「エンドポイント」、および「ポート」タグ/属性があります。

投稿されたエラー メッセージによると、WSDL は予期されたスキーマに従っておらず、解析に失敗しています。

簡単な回避策は、サーバーにアクセスできる場合、生成された WSDL ファイルをサービスと同じディレクトリに保存し、必要に応じて WSDL ファイルを変更し、変更された WSDL ファイルへの参照をクライアント アプリケーション。もちろん、これには、サービス定義を変更するたびにファイルが同期されなくなるという副作用があります。したがって、将来メソッドを大幅に変更する予定がある場合は、自動WSDL 生成を変更/修正することをお勧めします。

于 2013-04-25T12:07:04.930 に答える