2017-05-11 15 views
1

現在、SOAPクライアントをC#で修正しようとしていますが、転送エンコーディングに何とか悩まされています。私は多かれ少なかれC#の初心者ですので、完全に可能なのは、ちょうどここでマイナーなものを欠いている可能性があります。C#サービスクライアント - 転送エンコーディング:チャンク

私はローカルのTomcatサーバーから次のようにSOAPサービスを消費しました:hxxp://www.csharptutorial.in/37/csharp-net-how-to-consume-a-web-service-in-csharp-net -visual-STUDIO-2010

私の現在のコード:

using System; 
using ConsoleApp1.Lims; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      LimsZugriffService client = new LimsZugriffService(); 
      // FunktionsErgebnis response = client.connect(); 
      // Console.WriteLine("Connect" + response.meldung); 
      String[] bond = new String[] { "versuch.auftrag.nr=2014/0031" }; 
      String[] bondFail = new String[] { "abc" }; 
      VersuchsschrittErgebnis reponseVersuch = client.ermittleVersuchsschritte(bond); 
      Console.WriteLine(reponseVersuch.ermittelteVersuchsschritte.Length); 
      Console.WriteLine(reponseVersuch.meldung); 

     } 
    } 
} 

いくつかのテストの後、私は意図したとおりに何かが動作しないこと、が分かりました。私の応答 - <ermittelteVersuchsschritte>の配列は空であるように見えますが、 "control" -Flagsは正常に解析されます。

クライアントとサーバーの間のトラフィックをキャプチャして、何が間違っていたかを把握しました。実際には完全にそこにありました。ちょうど8192バイトブロックにチャンクされました。

WebClientのC#実装にTransfer-Encoding: Chunkedの問題がありますか。

数時間のGoogle検索の後、私はこの問題に満足のいく解決策を見つけることができませんでした。私はC#とWebServicesが私より優れていると知っている誰かが答えを持っていることを願っています。完全を期すために

マイWSDL

マイTraffic - Request->Response

答えて

0

私はようやく私のミスを考え出したいくつかの調査によれば、試行錯誤し、多くの時間後。

C#が間違いがサービス側にいたTransfer-Encoding: Chunked

に問題があるためにないようです。消費されたwsdlは、Axis(最初のAxisではなくAxis2)の助けを借りてJavaコードから生成されました。 Axisはwsdl 1.0を生成し、C#はwsdl 2.0を想定しています。したがって、最終的にwsdlに記載されているXML構造に欠陥があり、自動的には使用できませんでした。

AxisからApache CXFに切り替えることでこの問題を修正しました。新しく生成されたwsdlは、C#クライアント側で問題なく使用されていました。