【问题标题】:unable to load wcf restful help page after changing transferMode to "Streamed"将 transferMode 更改为“Streamed”后无法加载 wcf restful 帮助页面
【发布时间】:2011-08-21 16:14:16
【问题描述】:

在我的项目中,一个 wcf restful 服务,它允许用户将照片上传到 web 服务。

更改配置设置以允许上传大文件后。 (添加绑定配置,即“TransferMode”、“BufferSize”等) 所有运营合同都按预期工作。

但是,端点的服务帮助页面停止工作。

删除端点上的绑定配置设置后,帮助页面返回

我该如何解决这个问题?我错过了哪里

谢谢大家

<bindings>
          <webHttpBinding>
              <!-- buffer: 64KB; max size: 64MB -->
              <binding name="StreamedBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
                       receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" 
                       maxBufferPoolSize="67108864" maxBufferSize="65536" maxReceivedMessageSize="67108864">
              </binding>
          </webHttpBinding>
</bindings>

<service name="WCFRestFul.ApiRestful">
        <endpoint address="" binding="webHttpBinding"
                  bindingConfiguration="StreamedBinding" bindingName="StreamedBinding" 
                  contract="WCFRestFul.IApiRestful" behaviorConfiguration="web" />
 </service>

更新: 我认为这不仅仅是因为传输模式,还可能是其他一些设置。 一旦我删除了上面代码中的“bindingConfiguration”,服务帮助页面就会返回。 我有 2 个端点。另一个端点没有“bindingConfiguration”,服务帮助页面可以正常工作。 我肯定在这里错过了一些东西,也许是一些简单的东西。 任何帮助将不胜感激

【问题讨论】:

    标签: wcf-binding wcf-rest


    【解决方案1】:

    我接受了 carlosfigueira 的建议,痛苦地一次删除我的配置设置。

    我从

    更改了我的配置设置

    旧代码

    <bindings>
              <webHttpBinding>
                  <!-- buffer: 64KB; max size: 64MB -->
                  <binding name="StreamedBinding" closeTimeout="00:01:00" openTimeout="00:01:00" 
                           receiveTimeout="00:10:00" sendTimeout="00:01:00" transferMode="Streamed" 
                           maxBufferPoolSize="67108864" maxBufferSize="65536" maxReceivedMessageSize="67108864">
                  </binding>
              </webHttpBinding>
    </bindings>
    

    最终工作版本(transferMode="Streamed" 被移除)

    <bindings>
     <webHttpBinding>
    <binding name="StreamedBinding" maxReceivedMessageSize="67108864" />
     </webHttpBinding>
    </bindings>
    

    服务帮助页面终于回来了。

    但我不明白为什么它又回到了为什么它被关闭的原因。

    无论如何,这是我的情况的有效解决方案。 希望有人会觉得它有帮助。

    【讨论】:

      【解决方案2】:

      你说它停止工作是什么意思?在下面的示例中,服务仍会返回帮助页面(我尝试同时使用 IE 和 Chrome,它们都能看到该页面)。

          public class StackOverflow_5937029
      {
          [ServiceContract]
          public interface ITest
          {
              [WebGet]
              int Add(int x, int y);
          }
          public class Service : ITest
          {
              public int Add(int x, int y)
              {
                  return x + y;
              }
          }
          static void SendRequest(string address)
          {
              HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(address);
              req.Method = "GET";
      
              HttpWebResponse resp;
              try
              {
                  resp = (HttpWebResponse)req.GetResponse();
              }
              catch (WebException e)
              {
                  resp = (HttpWebResponse)e.Response;
              }
      
              Console.WriteLine("HTTP/{0} {1} {2}", resp.ProtocolVersion, (int)resp.StatusCode, resp.StatusDescription);
              foreach (string headerName in resp.Headers.AllKeys)
              {
                  Console.WriteLine("{0}: {1}", headerName, resp.Headers[headerName]);
              }
      
              Console.WriteLine();
              Stream respStream = resp.GetResponseStream();
              Console.WriteLine(new StreamReader(respStream).ReadToEnd());
      
              Console.WriteLine();
              Console.WriteLine("  *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*  ");
              Console.WriteLine();
          }
          public static void Test()
          {
              string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
              ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
              WebHttpBehavior behavior = new WebHttpBehavior
              {
                  HelpEnabled = true
              };
              WebHttpBinding binding = new WebHttpBinding
              {
                  TransferMode = TransferMode.Streamed
              };
              host.AddServiceEndpoint(typeof(ITest), binding, "").Behaviors.Add(behavior);
              host.Open();
              Console.WriteLine("Host opened");
      
              SendRequest(baseAddress + "/Add?x=4&y=8");
              SendRequest(baseAddress + "/help");
      
              Console.Write("Press ENTER to close the host");
              Console.ReadLine();
              host.Close();
          }
      }
      

      【讨论】:

      • 查看更新,可能不仅仅是因为传输模式,而是配置设置中的一些基本内容
      • 尝试从一个空的绑定配置开始,看看帮助页面是否仍然出现;如果没有,开始一次添加一个属性,直到添加一个导致它消失的属性。这应该会为您提供有关该问题的更多信息。
      猜你喜欢
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2014-01-28
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多