Один ServiceHost, две конечные точки (net.tcp и базовый http) - PullRequest
1 голос
/ 17 августа 2011

У меня работает работающий хост netTcp; мы пытаемся добавить поддержку Mac и поэтому добавляем BasicHttpBinding. В конечном счете, я хотел бы использовать тот же ServiceHost для этого, но когда я пытаюсь перейти к http://localhost:8085/Lss/test (test - это OperationContract, который я разработал только для вывода некоторого текста), он отвечает "400 Bad Запрос." Чего мне не хватает?

Он размещен в качестве службы Windows. Вот как выглядит настройка App.config:

  <service name="Wcf.Lss" behaviorConfiguration="DefaultBehavior">
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="netTcpBinding" contract="Wcf.ILss"/>
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" contract="Wcf.ILss" />
  </service>
</services>
<bindings>
  <netTcpBinding>
    <binding name="netTcpBinding" maxReceivedMessageSize="9655360" maxBufferSize="9655360" maxBufferPoolSize="524288">
      <readerQuotas maxArrayLength = "932000" maxStringContentLength="900000" maxDepth="32"/>
      <security mode="None"></security>
    </binding>
  </netTcpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="DefaultBehavior" >
      <serviceDebug includeExceptionDetailInFaults="True"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Хост настроен следующим образом:

var baseTcpUri = new Uri("net.tcp://localhost:8080/Lss");
var baseHttpUri = new Uri("http://localhost:8085/Lss");
var host = new ServiceHost(wcfSingleton, baseTcpUri, baseHttpUri);

host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true, HttpGetUrl=baseHttpUri });

var throttlingBehavior = new System.ServiceModel.Description.ServiceThrottlingBehavior();
throttlingBehavior.MaxConcurrentCalls = 50;
throttlingBehavior.MaxConcurrentInstances = 10;
throttlingBehavior.MaxConcurrentSessions = 10;
host.Description.Behaviors.Add(throttlingBehavior);

host.Open();

1 Ответ

0 голосов
/ 17 августа 2011

Вы не можете перейти к операции, вы можете только перейти к службе, которая в вашем случае размещается по базовому адресу. Итак, когда вы переходите к «http://localhost:8085/Lss", вы должны увидеть стандартную тестовую страницу WCF.

...