Не удалось загрузить справочную страницу wcf после изменения TransferMode на «Потоковый» - PullRequest
1 голос
/ 09 мая 2011

В моем проекте - услуга 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 ]

1 голос
/ 16 мая 2011

Я воспользовался советом 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 = "Потоковый" удален)

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

наконец-то страница справки службы вернулась.

Однако я не могу понять, почему он вернулся так же, как и почему он был выключен.

В любом случае, это рабочее решение для моего случая. надеюсь, кто-нибудь найдет это полезным.

0 голосов
/ 13 мая 2011

Что вы имеете в виду, говоря, что он перестает работать?В приведенном ниже примере справочная страница по-прежнему возвращается службой (и я попытался использовать 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();
    }
}
...