问题标签 [soaphttpclientprotocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12681 浏览

c# - 慢 SoapHttpClientProtocol 构造函数

我正在用 Microsoft Dynamics CRM 做一些实验。您通过 Web 服务与它进行交互,并且我在我的项目中添加了一个 Web 引用。Web 服务接口非常丰富,生成的“Reference.cs”大约有 90k loc。

我在控制台应用程序中使用 Web 引用。我经常改变一些东西,重新编译并运行。编译速度很快,但更新 Web 服务引用非常慢,大约需要 15-20 秒: CrmService service = new CrmService(); 分析显示所有时间都花在了 SoapHttpClientProtocol 构造函数中。

罪魁祸首显然是 XML 序列化代码(不包括在上面提到的 90k 位置中)是在运行时生成的,在被 JIT 之前。这发生在构造函数调用期间。在玩耍和尝试时,等待是相当令人沮丧的。

我尝试了 sgen.exe、ngen 和 XGenPlus 的各种组合(这需要几个小时并生成 500MB 的附加代码),但无济于事。我考虑过实现一个 Windows 服务,该服务几乎没有准备好在需要时提供的 CrmService 实例,但这似乎太过分了。

有任何想法吗?

0 投票
2 回答
9343 浏览

wcf - 如何关闭 WCF 服务客户端的证书吊销?

如何关闭 WCF 服务客户端的证书吊销?客户端代理由 wsdl.exe 生成并继承 SoapHttpClientProtocol。

0 投票
1 回答
2049 浏览

c# - 如何实现 SoapHttpClientProtocol

因为这个问题告诉我 SoapHttpClientProtocol 不是线程安全的。而且,我的真实生活测试告诉我这是真的,因为我的 SoapHeader 属性在调用之间不断混淆。有没有办法确保我可以跨线程使用它并保持我的属性正确?并确保我没有遇到那个问题中给出的示例,即一个线程认为连接已打开,而另一个线程已关闭它?提出请求后,我是否需要担心soap 标头值?在发出请求之前,如何验证属性是否与我设置的一样?

0 投票
2 回答
1918 浏览

c# - 如何配置 C# Web 服务客户端以并行发送 HTTP 请求标头和正文?

我正在使用在 VS2008 .Net 3.5 中生成的传统 C# Web 服务客户端,继承自 SoapHttpClientProtocol。这是连接到用 Java 编写的远程 Web 服务。

所有配置都是在客户端初始化期间在代码中完成的,如下所示:

一切正常,但是执行最简单的方法调用所花费的时间几乎是网络 ping 时间的两倍。而 Java 测试客户端与网络 ping 时间大致相同:

在分析会话的 TCP 流量后发现以下内容:

基本上,C# 客户端按以下顺序发送 TCP 数据包。

Java 客户端按以下顺序发送 TCP 数据包。

无论如何配置 C# Web 服务客户端以在 Java 客户端出现时并行发送标头/正文?

非常感谢任何帮助或指示。

0 投票
1 回答
1607 浏览

c# - 从 SoapHttpClientProtocol 生成的 MethodInfo 获取底层 WebResponse

我花了一段时间看这个,但我很难得到任何有用的答案。

基本上我有一个之前从 WSDL 编译的 SoapHttpClientProtocol。然后我从 clientProtocol 获取我的特定方法的 MethodInfo 并使用标准 Invoke 方法调用它。

您得到的只是来自作为对象的 Web 服务的响应。我想要做的是获取传回的实际 SOAP 响应,这样我就可以进入实际的 XML。我已经看到了一种非线程安全的方法,但在这种情况下没有帮助。有谁知道这样做的方法。也许某种形式的代理?

如果有人可以提供帮助,将不胜感激。

0 投票
1 回答
2698 浏览

.net - SoapHttpClientProtocol 缓存代理凭据?

我在 .NET4 中注意到 SoapHttpClientProtocol 似乎缓存了代理凭据。有谁知道这是否属实,以及如何刷新此缓存?如果我的用户更改了他们的凭据,我想尝试一下,但是一旦我让任何 SoapHttpClientProtocol 成功连接,任何调用调用似乎都可以工作。

这个程序的输出(我希望最后两个是假的)

0 投票
1 回答
585 浏览

.net - SoapHttpClientProtocol 抛出 NameResolutionFailure,而不是 ProxyNameResolutionFailure

当代理名称无效时,SoapHttpClientProtocol 会抛出状态为 NameResolutionFailure 的 WebException。那我怎么知道是代理还是目的地出错了?

当出现 NameResolutionFailure 时,我宁愿不检查代理服务器是否存在。我能想到的唯一想法是检查 WebException.message 属性,看看它是否包含代理名称与目标名称,但这似乎很恶心。它是最好的吗?

0 投票
2 回答
3161 浏览

.net - 如何从继承自 SoapHttpClientProtocol 的客户端类设置 HTTP 标头

我正在使用从 SoapHttpClientProtocol 继承的 MyClass 类(通过从 .wsdl 文件创建 WebReference 在我的项目中自动生成,代表服务)。

在调用此服务的“WebMethod”之前,我需要自定义我的请求的 http 标头。我尝试以这种方式重载 SoapHttpClientProtocol 的 GetWebRequest() 方法:

我希望在 MyClass 的构造函数中调用 GetWebRequest,显然不是。

有人可以帮助我吗?

0 投票
0 回答
887 浏览

c# - 扩展 SoapHttpClientProtocol 以纠正错误的服务器 Content-Length

最近我需要访问使用 SOAP::Lite 创建的 Web 服务。因为没有 WSDL,所以使用起来真的很麻烦,它不会返回合理的数据类型等,所以我开始使用提供的示例代码。

从一开始我就遇到了问题,请求超时。有时经常,有时很少,但从来没有完全没有问题。在使用 Fiddler 嗅探流量并进行搜索后,似乎 SOAP::Lite 存在/存在错误,该错误在处理 UTF-8 编码数据时弄乱了标头 Content-Length。这似乎是合理的,因为我的分析指出超时是由于客户端等待更多数据(Content-Length)而服务器表示已完成(真实数据)引起的。

所以现在我需要一种方法来对抗这个错误的标头字段,并且:

  1. 提供正确的内容长度或
  2. 填充有效负载以匹配 Content-Length

问题是,我从来没有机会使用 SoapExtension 或任何其他修改,因为 Invoke() 在解析开始之前最终会抛出 IoException 或 WebException。此外,我认为 WS 不是我的,而且相当不变。

我还尝试覆盖 SoapHttpClientProtocol.GetWebResponse() 来执行异步请求,但这也无济于事,因为在调用 HttpWebRequest.EndGetResponse() 之前我无法获取 ResponseStream 并且总是抛出异常。

有谁知道我该如何解决这个问题?

更新:到目前为止,我也尝试过 WCF,并在 MSDN 上看到了这篇文章——答案不是很令人振奋。基本上,这发生在管道中太深,用户代码无法访问。我现在最好的选择似乎是使用 Fiddler 脚本来更正 Content-Length 标头,这可能不是微不足道的,因为此 WS 仅可通过 HTTPS 使用。

/担

0 投票
1 回答
14544 浏览

service - 在调用 SoapHttpClient 服务时添加 http 标头

我必须使用我们的合作伙伴之一提供的服务。我没有得到什么指示,但被告知安全性是 PasswordDigest。我查了一下,立刻看到很多关于 WSE 的参考资料,所以我走了。它很容易实现,并且很快我就有了一个标准的 WSE 用户令牌,它使用 PasswordDigest 坐在我的消息的 SOAP 标头中。

当我们今天开始测试时,我立即被告知(通过错误消息)事情不正确。事实证明,out partner 不查看 SOAP 标头,而是希望 http 标头中的安全信息。

我看过很多关于如何将自定义 http 标头添加到代理类的文章,但是我的代理继承自 SoapHttpClientProtocol,它没有要添加的标头集合。我正在考虑制作一个原始的 httpWebRequest,但我有一个特定的访问方法,它有一些复杂的参数要处理(而且感觉就像是回溯)。

将自定义 http 标头添加到没有 GetWebRequest 方法的服务代理类的最佳方法是什么?

以供参考:

代理类声明:

我需要调用的目标方法:

对服务的实际调用很简单。传入的对象不是:

谢谢。