2009-03-26 9 views
4

以前はこれを見たことがありません。ヌルフィールドを持つオブジェクトを返すWebサービス

WebService.Implementation imp = new WebService.Implementation(); 
WebService.ImplementationRequest req = new WebService.ImplementationRequest(); 
return imp.GetValue(req); 

返されるオブジェクトはnullではありません。期待通りにImplementationResponseを返します。しかし、そのオブジェクトのすべてのフィールドはnullです。これは期待されていません。 WebServiceは現在、いくつかの一定のダミーデータを返します。これを別の開発者のマシンでテストしましたが、うまく動作します。

GetValueメソッドにnullを渡すと、WebServiceが例外をスローする必要があることにも注意してください。それはしません。私のためではありません。

WebServiceにオブジェクトを返させ、そのオブジェクトのすべての値をnullにする可能性がある、私の環境に何が間違っているのでしょうか?そして、どういうわけか「魔法のように」、この謎のオブジェクトを例外をスローする必要があるときに返します。

答えて

9

通常、生成されたコードとWebサービスから返されるXMLとの間に矛盾があるため、デシリアライズできません。

再度wsdlを取得し、すべてのプロキシクラスを再生成してから、もう一度やり直してください。正しいダミーデータを送信していることを確認してください。

更新:

これは、Webサービスは、私のチームによって管理されていなかったし、我々はサービスへの変更のいずれかの通知を取得しませんので、私に多くのことを起こるために使用されます。私たちは、デバッグのためにWebサービスパイプラインのSOAPメッセージを傍受してしまいました。 Hereさんは、あなたをあなたの道に導く素晴らしいリソースです。

パイプラインで何も変更する必要はありません。ただちにSOAPメッセージを取得し、後でデバッグできるように保存してください。ほとんどの場合、それは契約の変化であることが判明しました。私たちは契約を結ばないので、封筒を奪うことなく変更を知る方法がありませんでした。

とにかく、それがあなたの問題ではない場合でも、私はそれが良いことだと思います。

+0

私はこれがそれかもしれないと思った、私はあなたの提案をショットを与えた。サイコロはありません。 – Xaiter

3

< DataMember()>属性は、シリアル化されていないので、属性はありますか?

<DataMember()> _ 
Public Property SomeField() As String 
    Get 
     Return m_strSomeField 
    End Get 
    Private Set(ByVal value As String) 
     m_strSomeField= value 
    End Set 
End Property 

また、トレースビューアを使用して、クライアントとサーバー間で送信されるメッセージを分析することも検討してください。情報については以下を参照してください

https://stackoverflow.com/questions/560370/handling-wcf-proxy-null-return-issue

+0

WCFログビューアを使用してトレースを見てみましたが、ここではbizzareものがログに表示されません。たとえエラーでもなく、要求を出そうとしなかったようです。 – Xaiter

+0

ああ、ええ、ものがDataMemberでタグ付けされていることを確認しました。そうです。 – Xaiter

0

を、私はまた

あなたが合格しなかった私はGetValueメソッド メソッドにnullを渡した場合 WebServiceが例外 をスローする必要があることに注意すべきであると仮定ここでは、リクエストオブジェクトを渡しました。

また、Webサービスにデバッグして、何が起こっているのかを確認する必要があります。私はあなたが定数ダミー値に設定できるので、これを内部的に実装していると仮定します。

+0

私は例のコードで値を渡したことを知っています。私は、メソッドにnullを渡すと言っています。 – Xaiter

関連する問題