我对 SoapExtension 的配置有问题(与实现无关)。首先,我已经阅读了所有这些与 SoapExtensions 有某种关联的帖子(其中包括):
- 在客户端拦截来自和发往 Web 服务的 SOAP 消息
- https://www.codeproject.com/Articles/34381/Efficient-Tracing-Using-SOAP-Extensions-in-NET
- https://social.msdn.microsoft.com/Forums/en-US/d8d6fe09-74be-4210-91bb-a8924a742e8c/how-to-log-soap-message-which-is-going-out-of-my-网络应用程序?论坛=ncl
- http://www.seanmcilvenna.com/2010/08/20/logging-full-soap-messages/
- 如何创建 web.config 文件以加载 SoapExtension?
- 在 WCF 客户端中拦截消息
- https://msdn.microsoft.com/en-us/library/esw638yk(VS.85).aspx
- https://social.msdn.microsoft.com/Forums/en-US/1ba267b8-c08d-4c30-a1e1-792bac92fc87/soapextension-does-not-work-in-client-side?forum=netfxnetcom
- SoapExtension 未加载
场景如下:
我正在从库(dll)项目中使用第 3 方 WS(SOAP):connectors.dll
在这个项目中,我有一个对第 3 方 WS(SOAP) 的网络引用。我使用 VS 生成了代理(添加了 Web 引用,并指向 wsdl)。
另一方面,我有一个 Web 应用程序(实际上是一个 REST 服务),它引用了 connector.dll 的一个类(我们可以称之为 Connector-A)
(直到这里,我通过我的 REST-Service webapp 调用了一个休息服务,调用了连接器-A,这对 3rdParty 的代理服务进行了最后一次调用。我收到了一个响应,但它的字符无效(位置为 0x1F 1),这就是为什么我试图使用 SoapExtension -> 在反序列化发生之前将其删除)
- 我将 SoapExtension (XmlCleanupSoapExtension.cs) 实现为单独的库 Backend.SoapExentensions (基于此:https ://blogs.technet.microsoft.com/stefan_gossner/2009/08/26/how-to-deal-with-invalid -characters-in-soap-responses-from-asp-net-web-services/ )
最后一步,配置: * 在我的 REST-Service (webapp) 中添加一个引用 (VS->Add Reference) 到 Backend.SoapExtnsions.dll 和
- 在 web.config 中注册soapExtension:
`
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxUrlLength="4000" />
<authentication mode="None" />
<webServices>
<soapExtensionTypes>
<add type="Backend.SoapExtensions.XmlCleanupSoapExtension, Backend.SoapExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=66269ab3fc862c8f" priority="1" group="0" />
</soapExtensionTypes>
</webServices>
<globalization uiCulture="auto:es" culture="auto:es-ES" enableClientBasedCulture="true" />
</system.web>
`
当我调用一个休息服务时,它最后调用了 WS-Soap,我现在得到了一个运行时异常,这让我抓狂:
The value of the property 'type' cannot be parsed. The error is: Could not load type 'Offidesk.Backend.SoapExtensions.XmlCleanupSoapExtension' from assembly 'Offidesk.Backend.SoapExtensions'.
我想我已经为这条线尝试了所有可能的组合:
<add type="Backend.SoapExtensions.XmlCleanupSoapExtension, Backend.SoapExtensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=66269ab3fc862c8f" priority="1" group="0" />
- 有和没有程序集名称
- 有和没有命名空间
- 有和没有版本、文化和 PublicToken
- 组=“0”和组=“高”
实际上,我对这个运行时异常感到非常沮丧。我虽然可能块内部的位置可能会影响,但我所有的尝试都得到了同样的例外......
任何想法??
提前致谢。
注意:我还尝试了其他技术来清理覆盖 SoapHttpClientProtocol(在扩展类中)方法的服务器响应:GetReaderForMessage,但对我也不起作用(不知道为什么)。
编辑
最后,无效字符 0x1F 的问题并非如此。我没有意识到响应是用 gzip 压缩的,并且代理客户端试图将压缩响应解析为 XML,这显然在运行时引发了异常。
但是,我很想知道为什么我的 web.config 和soap 扩展不起作用(迟早我们会需要这个配置......所以最好防止)。