C# 服务客户端 - 传输编码:分块
C# Service Client - Transfer-Encoding: Chunked
我目前正在尝试用 C# 修复我的 SOAP 客户端,但不知何故卡在了传输编码上。我或多或少是 C# 的新手,所以我很可能只是在这里遗漏了一些小东西。
我从我们的本地 Tomcat 服务器使用了一个 SOAP 服务:https://web.archive.org/web/20180506023052/http://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
时遇到了一些问题?
谷歌搜索了几个小时后,我找不到解决此问题的令人满意的解决方案。我希望比我更了解 C# 和 WebServices 的人有答案。
为了完整起见:
我的WSDL
经过一些研究、反复试验和很多时间,我终于弄清楚了我的错误。
C# 似乎没有 Transfer-Encoding: Chunked
有问题
错误在服务端。使用的 wsdl
是在 Axis
的帮助下从 java 代码生成的(第一个 Axis
不是 Axis2
)。 Axis 生成 wsdl 1.0
而 C# 似乎期望 wsdl 2.0
。所以最终,wsdl
中描述的XML-结构存在缺陷,无法自动消费。
我们通过从 Axis
切换到 Apache CXF
解决了这个问题。新生成的 wsdl
在我们的 C# 客户端没有问题地使用。
我目前正在尝试用 C# 修复我的 SOAP 客户端,但不知何故卡在了传输编码上。我或多或少是 C# 的新手,所以我很可能只是在这里遗漏了一些小东西。
我从我们的本地 Tomcat 服务器使用了一个 SOAP 服务:https://web.archive.org/web/20180506023052/http://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
时遇到了一些问题?
谷歌搜索了几个小时后,我找不到解决此问题的令人满意的解决方案。我希望比我更了解 C# 和 WebServices 的人有答案。
为了完整起见:
我的WSDL
经过一些研究、反复试验和很多时间,我终于弄清楚了我的错误。
C# 似乎没有 Transfer-Encoding: Chunked
错误在服务端。使用的 wsdl
是在 Axis
的帮助下从 java 代码生成的(第一个 Axis
不是 Axis2
)。 Axis 生成 wsdl 1.0
而 C# 似乎期望 wsdl 2.0
。所以最终,wsdl
中描述的XML-结构存在缺陷,无法自动消费。
我们通过从 Axis
切换到 Apache CXF
解决了这个问题。新生成的 wsdl
在我们的 C# 客户端没有问题地使用。