Не удалось найти базовый адрес, соответствующий схеме net.tcp

Я переместил свой сервис передачи файлов из basicHttpBinding в netTcpBinding, так как я пытаюсь настроить канал дуплексного режима. Я также запустил свой сервис совместного использования портов net.tcp.

В настоящее время я нахожусь в dev и сам хостинг на xp box, пока мы не переместим приложение на сервер dev. так что пока у меня нет доступа к IIS.

После настройки моего сервиса как такового:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
        <endpoint name="MyFileTransferEP"
                  address  = ""
                  binding  = "netTcpBinding"
                  bindingConfiguration="MyFileTransferNetTcpEP"
                  behaviorConfiguration="NetTcpEPBehavior"
                  contract="API.FileTransfer.IFileTransferService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:8001/project/filetransfer.svc" />
          </baseAddresses>
        </host>
</service>

И моя привязка как таковая:

<netTcpBinding>
        <binding name="MyFileTransferNetTcpEP"
                 hostNameComparisonMode="StrongWildcard"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00" 
                 receiveTimeout="00:10:00" 
                 sendTimeout="00:01:00"
                 maxReceivedMessageSize="2147483647"
                 transferMode="Streamed"
                 portSharingEnabled="true">
          <security mode="None">
            <transport clientCredentialType="None" />
            <message clientCredentialType="None" />
          </security>
        </binding>
</netTcpBinding>

Я получаю следующую ошибку, когда я прав и браузер к файлу SVC:

Не удалось найти базовый адрес, соответствующий схеме net.tcp для конечной точки с привязкой NetTcpBinding. Схемы зарегистрированных базовых адресов: [http].

Чтение в Интернете предполагает, что для решения этой проблемы мне нужно было добавить привязку net.tcp к привязке приложения в IIS. Но что мне делать, если я сам хостинг и не имею доступа к IIS?? Кстати, если вы читаете это и "имеете" IIS, выполните следующие действия: Щелкните правой кнопкой мыши виртуальный каталог / приложение в IIS -> Управление приложением -> Дополнительные параметры. А в разделе "Активные протоколы" добавьте net.tcp.

Есть идеи?


ОБНОВЛЕНИЕ: я думал, что это работало, но это все еще не работает. Вот что у меня сейчас: я все еще получаю сообщение об ошибке "Не удалось найти базовый адрес, соответствующий схеме net.tcp". Я изменил все свои базовые адреса, чтобы отразить ваше предложение. Вот что у меня сейчас:

<service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService">
            <endpoint name="MyJSONFileTransferEP"
                      address="json"
                      binding="webHttpBinding"
                      bindingConfiguration="jsonWeb"
                      behaviorConfiguration="WebHttpEPBehavior"
                      contract="API.FileTransfer.IJSONFileTransferService" />
            <endpoint name="MyPOXFileTransferEP"
                      address="pox"
                      behaviorConfiguration="WebHttpEPBehavior"
                      binding="webHttpBinding"
                      bindingConfiguration="poxWeb"
                      contract="API.FileTransfer.IPOXFileTransferService" />
            <endpoint name="MySOAPFileTransferEP"
                      address="filetransfer"
                      binding="netTcpBinding"
                      bindingConfiguration="netTcpWeb"
                      behaviorConfiguration="NetTcpEPBehavior"
                      contract="API.FileTransfer.ISOAPFileTransferService" />
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:2544/filetransfer/" />
              </baseAddresses>
            </host>
          </service>

Я пробовал это с обоими "net.tcp://localhost:2544" & "net.tcp://localhost:8001". Нужно ли что-то добавить (разрешить) в настройках брандмауэра? Любые другие предложения?

Вот mexTcpBinding моего filetransferservice в моем файле App.config:

<endpoint address="net.tcp://localhost:2544/filetransfer/mex"
        binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange"
        name="filetransfermex">
        <identity>
          <certificateReference storeName="My" storeLocation="LocalMachine"
            x509FindType="FindBySubjectDistinguishedName" />
        </identity>
      </endpoint>

Я все еще не могу сослаться на мой FileTransferServiceClient в моем веб-приложении.

Еще раз спасибо.

10 ответов

Решение

Вам нужно определить только базовый адрес (не весь адрес) для вашей службы, а затем все остальное в конечной точке службы. Адрес у вас с filetransfer.svc файл в конце не является допустимым базовым адресом (это действительно адрес файла)

<service behaviorConfiguration="transferServiceBehavior" 
         name="API.FileTransfer.FileTransferService">
    <host>
      <baseAddresses>
        <add baseAddress="net.tcp://localhost:8001/project/" />
      </baseAddresses>
    </host>
    <endpoint name="MyFileTransferEP"
              address  = "filetransfer"
              binding  = "netTcpBinding"
              bindingConfiguration="MyFileTransferNetTcpEP"
              behaviorConfiguration="NetTcpEPBehavior"
              contract="API.FileTransfer.IFileTransferService" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

При этом и с использованием собственного хостинга ваш сервис будет доступен по полному адресу:

net.tcp://localhost:8001/project/filetransfer

Так как это net.tcp, и вы самостоятельно размещаете хостинг, вам вообще не нужен svc-файл.

ОБНОВЛЕНИЕ: если вы хотите иметь возможность получать метаданные на свой базовый адрес net.TCP, вам необходимо предоставить конечную точку net.Tcp MEX, подобную этой, внутри вашего <service> раздел:

        <endpoint name="NetTcpMEX"
                  address="netTcpMex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />

Ошибка (WCF): не удалось найти базовый адрес, который соответствует схеме net.tcp для конечной точки с привязкой NetTcpBinding. Схемы зарегистрированных базовых адресов: [http].

Шаг 1. Обратите внимание, что поддержка WAS (Служба активации Windows) или протокола, отличного от http, поддерживается только следующими платформами: • Windows Vista • Windows 7 • Windows Server 2008

  1. Перейти к включению или отключению функций Windows
  2. Перейти к Microsoft .NET Framework 3.5
  3. Проверьте активацию Windows Communication Foundation HTTP
  4. Проверьте Windows Communication Foundation не-HTTP-активация

Шаг 2: IIS > Веб-сайт хоста WCF> Управление приложением> Дополнительные параметры> Включенные протоколы> Установите значение HTTP,NET.TCP

Пробел в записи "Включенные протоколы" в IIS => Выбрать виртуальный каталог / приложение => дополнительные параметры => Включенные протоколы. например, http, net.tcp. (Пробел между текстом протокола

Это должен быть http, net.tcp (т. Е. Между текстом протокола не должно быть пробела)

Пройдя через множество решений... я нашел окончательное решение в этом блоге... однако я собираюсь объяснить всю процедуру здесь.. вам нужно выполнить следующие шаги...

Шаг 1:(Служба активации процессов Windows) или поддержка протокола, отличного от http, поддерживается только следующими платформами: • Windows Vista • Windows 7 • Windows Server 2008

  • Перейти к включению или отключению функций Windows
  • Перейти к Microsoft .NET Framework 3.5
  • Проверьте активацию Windows Communication Foundation HTTP
  • Проверьте Windows Communication Foundation не-HTTP-активация

Шаг 2: IIS> Веб-сайт хоста WCF> Управление приложением> Дополнительные параметры> Включенные протоколы> Установите значение http,net.tcp

проверьте, решена ли ваша проблема после выполнения шага 2, если нет, то выполните следующий шаг

Шаг 3: В administrator-level Command Prompt window, выполните следующую команду.

%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.tcp',bindingInformation='8082:*']

Перезапустите IIS один раз, или вы можете получить Failed to map the path '/' исключение сейчас

Ваша предварительная настройка приложения будет выглядеть так, как показано ниже

введите описание изображения здесь

Для будущих читателей.

Убедитесь, что вы не используете IIS-Express.

Это была моя "гоча".

Ссылка:

http://www.iis.net/learn/extensions/introduction-to-iis-express/iis-express-faq

        Q: Does IIS Express support non-HTTP protocols such as net.tcp or MSMQ?
        A: No. IIS Express only supports HTTP and HTTPS as its protocol.

Это свойство в Visual Studio и свойствах web.csproj (или аналогичных) и левой вкладке "Web". Существует флажок "Использовать IIS Express". Снимите это.

После того, как вы это сделаете, вам все равно придется перейти к IIS(7) и "http,net.tcp" для "Включенные протоколы" (как описано в других ответах здесь)

Кроме того, если вы получаете указанную ошибку, связанную с именованным каналом.

Не удалось найти базовый адрес, соответствующий схеме net.pipe для конечной точки с привязкой NetNamedPipeBinding.

Затем вам нужно добавить "net.pipe" в список.

Пример:

HTTP, net.tcp, net.pipe

Также см. Ниже для конкретной ошибки именованного канала.

Настройте WCF как именованный канал, размещенный на IIS7

ТАКЖЕ: Проверьте эти соответствующие службы Windows (именованные каналы или TCP или оба)

(служба именованных каналов Windows)

NetPipeActivator

Net.Pipe Listener Adapter

Receives activation requests over the net.pipe protocol and passes them to the Windows Process Activation Service.

(служба Windows TCP)

NetTcpActivator

Net.Tcp Listener Adapter

Receives activation requests over the net.tcp protocol and passes them to the Windows Process Activation Service.

Пожалуйста, установите компонент "Активация без Http" из Панели управления -> Программы -> Включить или выключить окно -> Функции -> Добавить функции ->.net framework .* Особенности -> Активация Wcf -> Активация без Http.

Для Windows 10
Шаг 1. Перейдите к разделу "Включение и выключение функций Windows"> .Net Framework 4.6 Advanced Services > "Службы WCF"> "Активация TCP"

Шаг 2. IIS > Веб-сайт хоста WCF> Управление приложением> Дополнительные параметры> Активированные протоколы> Установите значение net.tcp,http

Шаг 3: Откройте командную консоль с правами администратора> введите iisreset

У меня была такая же проблема (среда: Win7/IIS7.5 .NET4), и я решил ее, настроив привязку через appcmd.exe, доступный из каталога "c: \ Windows \ System32 \ inetsrv"

"appcmd.exe set pp" WebsiteName / applicationName "/enabledProtocols:http,net.tcp"

примечание: конфигурация IIS является иерархической, и, следовательно, мы должны изменить конфигурацию на самом низком уровне, чтобы избежать нежелательных изменений / проблем безопасности в других приложениях.

Могут помочь следующие ссылки: http://msdn.microsoft.com/en-us/library/ms788757.aspx http://support.microsoft.com/kb/2803161

Надеюсь, что это поможет Альберт

У меня была такая же ошибка в Windows 7, и я исправил ее, открыв IIS, щелкните правой кнопкой мыши веб-сайт, на котором находится ваше приложение, и выберите "Изменить привязки...". Я добавил сюда привязку net.tcp, и проблема была решена.

Экран привязки сайта

      <add baseAddress="net.tcp://localhost:8090" />

Пожалуйста, отредактируйте его в файле конфигурации, как показано

Другие вопросы по тегам