Ste*_*rdi 4 c# streaming wcf soap
这个,如果我第一次尝试使用流式传输WCF,我正在努力与可怕的"远程服务器返回一个意外的响应:(400)错误请求"响应.
跟踪查看器说这是一个System.ServiceModel.ProtocolException,并显示消息" 从网络收到的XML存在问题.有关更多详细信息,请参阅内部异常." 内部异常类型显示" 消息正文无法读取,因为它是空的. "
让其他一切都相等,如果我在客户端切换到缓冲模式,我可以调试到服务器代码!
出于某种原因,我必须以编程方式配置我的服务,如下所示:
public IUniverseFileService OpenProxy(string serviceUrl)
{
Debug.Assert(!string.IsNullOrEmpty(serviceUrl));
var binding = new BasicHttpBinding();
binding.Name = "basicHttpStream";
binding.MaxReceivedMessageSize = 1000000;
binding.TransferMode = TransferMode.Streamed;
var channelFactory =
new ChannelFactory<localhost.IUniverseFileService>(
binding,
new EndpointAddress(serviceUrl));
return channelFactory.CreateChannel();
}
Run Code Online (Sandbox Code Playgroud)
服务器配置如下:
<system.serviceModel>
<!-- BEHAVIORS -->
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true" httpHelpPageEnabled="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
</behavior>
</serviceBehaviors>
</behaviors>
<!-- SERVICES -->
<services>
<service behaviorConfiguration="serviceBehavior" name="Org.Acme.UniverseFileService">
<endpoint address=""
binding="basicHttpBinding"
name="basicHttpStream"
bindingConfiguration="httpLargeMessageStream"
contract="Org.Acme.RemoteCommand.Service.IUniverseFileService" />
<endpoint address="mex"
binding="mexHttpBinding"
bindingConfiguration="" name="mexStream"
contract="IMetadataExchange"/>
</service>
</services>
<!-- BINDINGS -->
<bindings>
<basicHttpBinding>
<binding name="httpLargeMessageStream"
maxReceivedMessageSize="2147483647"
maxBufferPoolSize="2147483647"
maxBufferSize="2147483647"
transferMode="Streamed"/>
</basicHttpBinding>
</bindings>
Run Code Online (Sandbox Code Playgroud)
我感谢您的帮助!
斯特凡诺
一切都开始工作,当我从改变传输模式Streamed,以StreamedResponse如下:
binding.TransferMode = TransferMode.StreamedResponse;
Run Code Online (Sandbox Code Playgroud)
我仍然不明白为什么这样做有效Streamed,为什么我能够从服务器发送和接收文件流.
| 归档时间: |
|
| 查看次数: |
6904 次 |
| 最近记录: |