将transferMode更改为“Streamed”后无法加载wcf restful帮助页面

时间:2011-05-09 12:43:05

标签: wcf-binding wcf-rest

在我的项目中,提供wcf restful服务,允许用户将照片上传到网络服务。

更改配置设置后允许大文件上传。 (添加绑定配置,即“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”,服务帮助页面正常工作。 我在这里肯定错过了一些东西,也许有些简单。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分: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>

最后,服务帮助页面又回来了。

然而,我无法理解为什么它与它被关闭的原因相同。

无论如何,这是我案例的有效解决方案。 希望有人会觉得它有用。

答案 1 :(得分:0)

你说停止工作是什么意思?在下面的示例中,服务仍然返回帮助页面(我尝试使用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();
    }
}