8

サード パーティの Web サービスを使用しており、ASP.NET Web アプリケーションからそれを呼び出そうとしています。ただし、Web サービスをインスタンス化すると、次の System.InvalidOperationException 例外がスローされます。

メソッド「ABC.XYZ」は反映できません。System.InvalidOperationException: メソッド 'ABC.XYZ' を反映できません。---> System.InvalidOperationException: 名前空間 ' http://mysoftware.com/ns 'の XML 要素 'MyDoc'がメソッドと型を参照しています。WebMethodAttribute を使用してメソッドのメッセージ名を変更するか、XmlRootAttribute を使用して型のルート要素を変更します。

私が収集できることから、Web サービスのメソッドと型の間にはあいまいな点があるようです。誰でもこの例外の原因を明確にすることができますか?これを修正するために私にできることはありますか?それとも Web サービスの所有者に連絡して修正する必要がありますか?

編集: Visual Studio 2008 はプロキシ クラスを作成しました。残念ながら、wsdl はローカルにインストールされたサード パーティ製アプリの Web サービスであるため、wsdl へのリンクを提供できません。

4

9 に答える 9

14

今日、同じ問題に遭遇しました。その理由は、Visual Studio によって生成され、メソッドの 1 つにパラメーターとして渡されたクラスに、既定のパラメーターなしのコンストラクターがなかったためです。追加したら、エラーはなくなりました。

于 2011-12-02T19:19:32.123 に答える
3

問題は、VS と Java で記述された Web サービスとの間のデータ型の問題にあるようです。

最終的には、VS によって作成されたクラスとスキーマ ファイルを手動で編集することで修正されました。

于 2009-01-13T15:32:51.777 に答える
2

サードパーティの Web サービスを利用しているときに、まったく同じ問題に遭遇しました。この場合の問題は、参照ファイルの mustUndertand プロパティがブール値を検索していたため、名前空間プロパティが文字列を検索していたことです。

参照を調べることで、問題のあるプロパティを特定し、メソッド シグネチャに「オーバーライド」を追加するだけで済みました。

サービスを更新するたびにこれを行う必要があるため、理想的ではありませんが、これを回避する他の方法は見つかりませんでした。

参照ファイルを見つけるには、ソリューション エクスプローラーから [すべてのファイル] を選択します。

お役に立てれば

于 2008-09-25T18:48:47.150 に答える
1

サービスによって出力または提供された wsdl は、wsdl.exe または serviceutil が理解できる形式ではないと推測しています。

どのようにプロキシ クラスを作成していますか?

また、wsdl スキーマに対して wsdl を検証して検証し、その有効性を確認することもできます。

于 2008-09-25T11:50:43.627 に答える
1

私の場合、メソッドによって返されるクラスで、デフォルトのパラメーターなしのコンストラクターを公開できなかったという事実により、「メソッドを反映できません」というエラーが発生しました。

私はVB.NETで働いていました。私の return クラスでは、いくつかのパラメーターを受け取る "New(..)" メソッドを宣言しました (それが私のコードで使用したかったためです)。しかし、そうすることで、VB がバックグラウンドで追加するデフォルトの (非表示の) パラメーターなしの New() コンストラクターを抑制しました。どうやら Web サービス ハンドラーでは、パラメーターなしのコンストラクターが使用可能である必要があります。クラスにパラメーターなしの New() コンストラクターを追加するとすぐに、すべて正常に機能しました。

于 2012-02-02T01:26:04.947 に答える
0

同じメッセージが表示されましたが、.NET 2.0 のみがインストールされたマシンで 3.5 アプリケーションを実行しようとしたため、System.Runtime.Serialization.dll が見つからないことが原因でした。

于 2009-05-25T13:26:22.213 に答える
0

WebMethod私は同じ問題を抱えていましたが、パラメーターの 1 つに型のメンバーが含まれていることがわかりました。そのinterfaceためVS、シリアル化できませんでした。discoファイルをダウンロードしようとしたときの例外は次のとおりです

System.InvalidOperationException: タイプ 'Leopard.Interfaces.IUser' のメンバー 'Leopard.JobDespatchParameters.SendingUser' をシリアル化できません。詳細については、内部例外を参照してください。---> System.NotSupportedException: Leopard.Interfaces.IUser 型のメンバー Leopard.JobDespatchParameters.SendingUser をシリアル化できません。これはインターフェイスであるためです。

于 2013-07-10T05:52:04.727 に答える