我使用 Spring.NEt frwm - Spring.Web.Services.WebServiceProxyFactory 为 WCF 服务创建代理对象。
WCF 服务使用 SOAP MTOM。配置在这里:
<basicHttpBinding>
<binding name="MTOM_BINDING"
maxReceivedMessageSize="10000000000"
receiveTimeout="00:10:00"
sendTimeout="00:10:00"
maxBufferSize="10000000000"
maxBufferPoolSize="524288"
bypassProxyOnLocal="true"
messageEncoding="Mtom">
<readerQuotas
maxArrayLength="10000000000"
maxBytesPerRead="10000000000"
maxDepth="10000000000"
maxNameTableCharCount="10000000000"
maxStringContentLength="10000000000"/>
</binding>
</basicHttpBinding>
<service name="TestService"
behaviorConfiguration="DefaultBehavior">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="MTOM_BINDING"
contract="TestService.ITestService"
bindingNamespace="http://test.com/TEST"
behaviorConfiguration="SimpleWSDLBehavior"/>
<endpoint
contract="IMetadataExchange"
binding="mexHttpBinding"
address="mex"/>
</service>
Spring.Web.Services.WebServiceProxyFactory 代理对象的配置:
<object id="testProxy"
type="Spring.Web.Services.WebServiceProxyFactory, Spring.Services">
<property name="ServiceUri" value="http://localhost/TestService.svc?wsdl"/>
<property name="ServiceInterface" value="TestService.ITestService, TestService"/>
<property name="ProductTemplate">
<object>
<property name="Timeout" value="2147483646" />
</object>
</property>
</object>
我找不到如何为 Spring.Web.Services.WebServiceProxyFactory 指定 WCF 服务使用的不是 SOAP 而是 SOAP MTOM。
因为 Spring.Web.Services.WebServiceProxyFactory 的这个配置除了 SOAP 消息,它的数据序列化为文本而不是二进制。