オブジェクトをFiddlerで見ることができますが、オブジェクトが私の最後でデシリアライズしていません。誰もこれを見たことがありますか?Webサービス呼び出しがnullの後の応答オブジェクトのプロパティ
答えて
私が考えることができる唯一の理由は契約の不一致です。検証エラーがスローされない場合は奇妙ですが。正しいWSDLから生成されたクライアントを使用していますか?それはWCFクライアントかSOAPですか?前者は検証を行いますが、スキーマの不一致が後者をスリップする可能性があります。
これは、wsdlツールからプロキシクラスを生成し、VS2010 GUIを使用してプロキシクラスをサービス参照として追加するときに発生します。これはSOAPクライアントです。 – Sean
wsdl.exeではなくsvcutil.exeを使用してください。または、「サービス参照の追加」を使用して、WSDLまたはメタデータのエンドポイントをポイントするだけです。 –
私はこれとまったく同じ問題を抱えています.WSDLに見られる名前空間と(Fiddlerでの)XML応答はまったく同じです。応答オブジェクトは、@XmlElementRefs({@ XmlElementRef(type = Class1.class、...})でアノテーションされている(Javaの)サーバーサイドの汎用配列を渡す単純なラッパーです。 C#クライアントは次のようにうまく見えます。
「レスポンスがnullです」または「レスポンスにnullが含まれています」または「リクエストがnullです」または「リクエストにnullが含まれています」とは、ほとんどの場合、名前空間の不一致を意味します。例えば、応答は、含まれていてもよい:この場合
<response xmlns="http://bar.com"/>
を
<response xmlns="http://foo.com"/>
を実際にあるべきで、NULLが受信されます。
YES ! – mikey
これが私に起こるたびに、サービス参照を更新する必要があるからです。それを試して、何が起こるか教えてください:)
レスポンスありがとう、私を信じて、私は約1000回=削除して再作成しました=( しかし、それは同じように単純な何かを欠いているか、どこか他の愚かな間違いを犯している可能性が高いです(私の最初のC#アプリ) 私はVS 2010とSharpDevelopを試してみましたが、無用です。 – earcam
あなたが尋ねてきたので、あなたはもう一度それをやることができるかどうか質問してください。私。削除して再作成するのではなく、サービス参照を更新します。それがうまくいかないとすれば、オブジェクトとメソッドの定義/コントラクトを見るのが理想的でしょう:) –
SharpDevelopでリフレッシュしました。以前と同じでした。 VS Express 2010でWebService Referenceをリフレッシュしたときに、プロジェクトのデフォルト名前空間の先頭にC#名前空間が追加されました(DefaultNamespace.ServiceReferenceなど)。いずれかのIDEから実行すると、nullフィールドを持つ同じレスポンスオブジェクトになります。 – earcam
解決済み...または少なくとも回避策があります。 Javaコードでは、@XmlElementRefsと@XmlElementRefはそれぞれ@XmlElementsと@XmlElementでなければなりません( "type"属性と同様に "name"属性も必要です)。
私はこれをJavaタグとC#とWebサービスで新しい質問として投稿したのでしょうか、いくつかの厄介なstackoverflowerがこの子どものエラーを発見したはずです。
私はReference.csのOrder値をチェックして解決した同様の問題がありました。
リターンパラメータの順序は変更されましたが、Visual Studioでサービス参照を更新しても「Order」値は変更されませんでした。
Fiddler/SoapUIで返されるパラメータが、プロキシ生成されたクラスと同じであることを確認してください。
VSからのSVCUTIL/Service Referenceでクライアントを作成したのと同じケースがありました。応答は正しいデータ(IClientMessageInspector.AfterReceiveReplyメソッドで確認済み)で正常に受信されましたが、オブジェクトレベルの値は入力されませんでした。
1)特定のオブジェクトを正確にその型として命名されたが、その種類は異なる名前空間を持っていた:(たSystem.Diagnosticsの出力を介して確認した)は、デシリアライズ・エラー
問題は二重だったがありませんでした。これは、プロキシジェネレータがオブジェクトの1つにクラスのnamespaceパラメータ(System.Xml.Serialization.XmlElementAttribute注釈)を割り当てるのを混乱させたようです。
2)注文パラメータ(System.Xml。プロパティのSerialization.XmlElementAttribute注釈)が必要ではないし、また、名前空間パラメータからそう
が欠落したと[System.Xml.Serialization.XmlElementAttribute(ISNULLABLE =真、オーダー= 0)]
:[ System.Xml.Serialization.XmlElementAttribute(IsNullable = true、Namespace = "http://www.whathevernamespaceiscorrect。com ")]
基本的に、生成されたプロキシでは、クラスの名前空間を型に指定された名前空間に修正し、orderパラメータをnamespaceパラメータに置き換えて正しい名前空間に設定する必要がありましたWSDL
私は同じ問題を抱えていたし、名前空間の問題は根cause.Howeverことを示唆したように、私のプロキシクラスは、クラスやネストされた名前空間の長鎖を入れ子にしている。
それが正しい名前空間を識別するために混乱してここでは、クライアントプロキシで更新が必要な名前空間を理解する方法を説明します。
ClientMessageInspectorクラスのAfterReceiveReplyメソッドでリクエストをインターセプトしたのは、応答メッセージを受信した後で、クライアントアプリケーションに戻す前にメッセージの検査または変更を有効にしたことです。 XMLDocumentを使用してResponseでnullを返します。 XMLから取得した名前空間でプロキシクラスを更新しました。変更を加えた後、オブジェクトは応答としてnullではありませんでした。
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message request, object correlationState)
{
MemoryStream ms = new MemoryStream();
XmlWriter writer = XmlWriter.Create(ms);
request.WriteMessage(writer);
writer.Flush();
ms.Position = 0;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(ms);
this.ReadMessage(xmlDoc);
ms = new MemoryStream();
xmlDoc.Save(ms);
ms.Position = 0;
XmlReader reader = XmlReader.Create(ms);
Message newMessage = Message.CreateMessage(reader, int.MaxValue, request.Version);
newMessage.Properties.CopyProperties(request.Properties);
request = newMessage;
}
private void ReadMessage(XmlDocument xmlDoc)
{
XmlNode v1 = xmlDoc.GetElementsByTagName("XPAth");
//Actual Namespace in XML, which should be used in Proxy Class
string namespaceURIForObjectInXML = v1.NamespaceURI;
}
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
}
}
出力と一致することを確認してください。 WSDL(ブラウザ)とレスポンス(SOAP-UI、Fiddler)を比較する。
- WSDLは、キャメルケース(lastNameの)を使用し、
- 応答がアンダー(姓)を使用します。
- 1. は、応答でWebサービスのHTTP POSTを呼び出し
- 2. WCF Webサービスがいくつかの繰り返し呼び出しの後に応答を停止する
- 3. ESB + Camel前の呼び出しからの応答に基づいて複数のWebサービスを呼び出す
- 4. Ajax呼び出しの応答リターン[オブジェクトのオブジェクト]
- 5. amazon ec2から外部Webサービスを呼び出したときの応答404
- 6. Webサービスに応じて呼び出す
- 7. 次のWebサービスを処理するための非同期Webサービス呼び出し応答を待ちます。
- 8. Webサービスの呼び出しアプリケーションが
- 9. Webサービスの応答はnullですが、SOAPメッセージの応答は有効です
- 10. アンドロイドアプリを呼び出す.net Webサービスの応答の種類は何ですか?
- 11. Java get SOAPサービスからの応答URL呼び出し
- 12. SOAP Webサービス呼び出しでnullが返される
- 13. Webサービス呼び出しHTTPS
- 14. 非同期Java Webサービス呼び出しの呼び出し
- 15. 呼び出しが成功した場合の応答本体null(アンドロイド)
- 16. 各Webサービス呼び出しのオブジェクトの変更
- 17. WebサービスのWebサービスへの呼び出しのスレッド - (.net 2.0)
- 18. Webサービスへの呼び出し(
- 19. 呼び出しTFS 2010のWebサービス
- 20. RESTful Webサービスの呼び出し
- 21. iOS Objective C Webサービスの呼び出し
- 22. HTTPSのWebサービス呼び出し失敗
- 23. RESTfulなWebサービスの呼び出し2.2
- 24. SQL ServerエンドポイントWebサービスの呼び出し
- 25. Webサービス呼び出しのWPF ProgressBar
- 26. ループ内のWebサービス呼び出し
- 27. Webサービスを呼び出すWebサービス
- 28. Webサービスのリクエスト/応答
- 29. ADSF Webアプリケーション呼び出しWebサービス
- 30. Web API呼び出しWebサービス
私は同じ問題を抱えています(特に、WSを非直列化するM $ C#コードをデバッグする方法がないように思われます)。 – earcam