以编程方式配置WCF流服务的错误响应(400)

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)

我感谢您的帮助!

斯特凡诺

Ste*_*rdi 7

一切都开始工作,当我从改变传输模式Streamed,以StreamedResponse如下:

binding.TransferMode = TransferMode.StreamedResponse;
Run Code Online (Sandbox Code Playgroud)

我仍然不明白为什么这样做有效Streamed,为什么我能够从服务器发送和接收文件流.


小智 5

ASP.NET开发服务器不支持流模式.您需要将服务部署到IIS(或WCF服务应用程序)以使用流模式.