Web Serivceを使用しているときに "ルートレベルのデータが無効です"エラー

私は、デスクトップの.netアプリケーションでWebサービスのメソッドを実行しようとしていますが、XML結果の表現に問題があります。私が上記のメソッドコンパイラを実行すると、このエラーがスローされます:

ネットワークから受信したXMLに問題があります。   詳細については内部例外を参照してください。

WebサービスはApacheサーバー上でホストされ、PHPで書かれています。 そのメソッドを正常に実行できるクライアント・サンプルがあります。結果XMLは次のようになります。

  <?xml version="1.0" encoding="UTF-8" ?> 
  
     
        11838-78    
        test    
  
  

ここでは内部例外の詳細の一部です: "ルートレベルのデータが無効です"

Message=The data at the root level is invalid. Line 1, position 1.
   Source=System.Runtime.Serialization
   LineNumber=0
   LinePosition=0
   StackTrace:
        at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
        at System.Xml.XmlUTF8TextReader.Read()
        at System.Xml.XmlBaseReader.IsStartElement()
        at System.Xml.XmlBaseReader.IsStartElement(XmlDictionaryString localName, XmlDictionaryString namespaceUri)
        at System.ServiceModel.Channels.ReceivedMessage.ReadStartEnvelope(XmlDictionaryReader reader)
        at System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders, Boolean understoodHeadersModified)
        at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
        at System.ServiceModel.Channels.MessageEncoder.ReadMessage(Stream stream, BufferManager bufferManager, Int32 maxBufferSize, String contentType)
        at System.ServiceModel.Channels.HttpInput.ReadChunkedBufferedMessage(Stream inputStream)
   InnerException: 

私は問題が何であるかを見つけるためにGoogleに多くの時間を費やしています。 XMLがBOM(Byte Order Mark)で始まってXMLReaderが例外をスローする原因となることがわかっただけです。

最後にここで私はメソッドを呼び出します:

 mywebservice.wsobjectDLPortTypeClient mys = new mywebservice.wsobjectDLPortTypeClient();
        try
        {
            string res;
      //    mys.Open();              
            res = mys.srvReq(sourcecode, destinationcode, date, time, count);
         catch (Exception e)
        {
           //do something
        }

どのような身体がこの問題を引き起こし、どのように私はそれを解決することができるのか知っていますか?

1
あなたのサンプルXMLには何も問題はありません。そのため、ストリームの前に何かがあることを示唆しています。コードをファイルにダンプして見てください。新しいメッセージを各メッセージごとにインスタンス化していますか?
追加された 著者 Tony Hopkinson,
サービスコールから生のバイトを取得できますか?文字列の最初の40〜50バイトを見ることができれば、それは役に立ちます。
追加された 著者 Huusom,
あなたはFiddler(またはsimalarツール)を使って 'wire on data'をインターセプトしようとしましたか?それはより多くの洞察を与えるかもしれない。
追加された 著者 Marvin Smit,
私はXMLReaderを直接操作しませんでした。私はちょうど私のプロジェクトにサービス参照を追加しようとしたときにVSがそれを作成したラッパーを使用してそのメソッドを呼び出した。
追加された 著者 m-abdi,
自分の投稿を編集して自分のコードを追加しましょう
追加された 著者 m-abdi,
私はどこにコードを挿入したWebサービスメソッドを呼び出す
追加された 著者 m-abdi,
残念ながら、私は生のバイトを取得する方法を知りません:(
追加された 著者 m-abdi,

答えはありません

0