WCF - HTTP не может зарегистрировать URL http://+:80/ - PullRequest
2 голосов
/ 04 марта 2011

Мой первый пост о Stackoverflow!

У меня возникли некоторые проблемы с сервисом WCF, который я пытаюсь создать, и мне нужна помощь, чтобы понять это.

Есть дваЧасти к сервису, первый - это очень простой веб-сервис в стиле REST, полный методов GET, он отлично работает.

Следующая область - это модель Pub / Sub, которая в основном будет выдавать подписчикам внутренние результатыконкретный метод вызова из первой области.Чтобы включить это, я слушаю две конечные точки, теперь каждый раз, когда я вызываю один метод в сервисе PubSub, я получаю ошибку выше.После поиска в веб-ящике я видел много сообщений о том, что IIS по умолчанию использует порт 80.

Теперь два вопроса: 1. Мой сервис прослушивает следующий базовый адрес, не имеющий отношения к 80 http://localhost:3526/TradePortal и http://localhost:3526/TradePortal/Operations 2. В идеале я бы разместил это в IIS

. Я предлагаю изменить базовый адрес клиента, чтобы он не использовал порт 80, но установлен ли он на стороне сервера илиКонфигурация на стороне клиента.

Я немного озадачен решением этой проблемы. Ранее я создал модель pubsub с использованием NetTCP в качестве привязки.

Любые подсказки относительно того, как решить эту проблемуэто будет приветствоваться

Конфигурация на стороне сервера:

<system.serviceModel>
    <services>
        <service behaviorConfiguration="Default" name="CFP_Web_Lib.TradePortal">
          <host>
            <baseAddresses>
              <add baseAddress="http://localhost:3526/TradePortal"/>
            </baseAddresses>
          </host>
            <endpoint address="" binding="webHttpBinding"
                 contract="CFP_Web_Lib.ITradePortal"
                      behaviorConfiguration="web"
                 />
          <endpoint address="Operations/" binding="wsDualHttpBinding"
               contract="CFP_Web_Lib.ITradeOperations"/>
               </service>
    </services>
<behaviors>
  <serviceBehaviors>
    <behavior name="Default">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>

    </behavior>
  </serviceBehaviors>
  <endpointBehaviors>
    <behavior name="web">
      <webHttp/>
    </behavior>
    </endpointBehaviors>
</behaviors>
</system.serviceModel>

Код на стороне клиента (автоматически генерируется VS2010)

<system.serviceModel>
    <bindings>
        <wsDualHttpBinding>
            <binding name="WSDualHttpBinding_ITradeOperations" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <reliableSession ordered="true" inactivityTimeout="00:10:00" />
                <security mode="Message">
                    <message clientCredentialType="Windows" negotiateServiceCredential="true" />
                </security>
            </binding>
        </wsDualHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://localhost:3526/TradePortal/Operations/"
            binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ITradeOperations"
            contract="CFP_Web.ITradeOperations" name="WSDualHttpBinding_ITradeOperations">
            <identity>
                <userPrincipalName value="callison@cfpartners.local" />
            </identity>
        </endpoint>
    </client>
</system.serviceModel>

1 Ответ

1 голос
/ 04 марта 2011

Проблема в клиенте, а не в сервере.WsDualHttpBinding использует два соединения - одно от клиента к серверу и одно от сервера к клиенту (для поддержки обратных вызовов).Это причина, почему она называется двойной.Чтобы разрешить входящее соединение, клиент предоставляет свой собственный сервер (реализацию обратного вызова) под капотом.Этот сервис также должен иметь некоторый адрес и неиспользуемый порт.Если вы не укажете этот адрес, по умолчанию будет использоваться порт 80, который, скорее всего, уже используется IIS.Вы должны изменить этот адрес на стороне клиента.Используйте атрибут clientBaseAddress конфигурации привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...