Подтвердить что ты не робот

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

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

В настоящее время я нахожусь в dev и сам хостинг на коробке xp, пока мы не переместим приложения к серверу 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].

Чтение онлайн предполагает, что для исправления этой проблемы i необходимо добавить привязку net.tcp к привязке приложения в ИИС. Но, что мне делать, если я сам хостинг и не имею доступа к IIS?? Кстати, если вы читаете это и "делаете", у меня есть IIS, сделайте следующее: Щелкните правой кнопкой мыши виртуальный каталог/приложение в IIS → Управление приложением → Расширенные настройки. И в разделе Enabled Protocols добавьте 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". Нужно ли добавлять (разрешать) что-то в настройках брандмауэра? Любые другие предложения?

Вот мой filetransferservice mexTcpBinding в моем файле 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 в своем веб-приложении.

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

4b9b3361

Ответ 1

Для вашей службы вам нужно определить только базовый адрес (а не весь), а затем остальные в конечной точке службы. Адрес, который у вас есть с файлом 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 вообще.

UPDATE:, если вы хотите получить метаданные на базовом адресе net.TCP, вам нужно будет вывести конечную точку net.Tcp MEX, как это, в разделе <service>:

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Убедитесь, что вы используете не, используя 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(или подобных) и левая вкладка "Веб". Существует флажок "Использовать IIS Express". Снимите этот флажок.

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

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

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

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

Пример:

HTTP, net.tcp, net.pipe

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

Настроить WCF как именованную трубку, размещенную на IIS7

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

(служба имен имен pipe)

NetPipeActivator

Net.Pipe Listener Adapter

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

(служба tcp windows)

NetTcpActivator

Net.Tcp Listener Adapter

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

Ответ 5

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

Шаг 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 '/' исключение Failed to map the path '/' сейчас

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

enter image description here

Ответ 6

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

Ответ 7

Для Windows 10
Шаг 1. Включение и выключение функций Windows. > .NET Framework 4.6 Дополнительные службы > Службы WCF > Активация TCP

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

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

Ответ 8

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

"appcmd.exe установить pp" WebsiteName/applicationName "/enabledProtocols:http,net.tcp"

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

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

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

Ответ 9

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

Привязки сайта PrintScreen