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

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

В настоящее время я занимаюсь разработкой и самостоятельно размещаю на сервере XP, пока мы не переместим приложение на сервер разработки. Итак, на данный момент у меня нет доступа к 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 в своем веб-приложении.

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


person Peter    schedule 24.11.2009    source источник
comment
ну, с baseAddress = net.tcp: // localhost: 2544 / filetransfer / и address = filetransfer на вашей конечной точке, ваш полный URL-адрес будет net.tcp: // localhost: 2544 / filetransfer / filetransfer - вы пытались подключиться к нему ??   -  person marc_s    schedule 25.11.2009
comment
Спасибо - глупая оплошность. Я нормально там мыло было и поменял обратно. Я провел последний час, просматривая мои файлы App.config и Web.config с помощью зубчатой ​​гребенки, и, наконец, заставил их скомпилировать. Когда я добавляю ссылку на службу, я могу ссылаться на ../trade/mex и ... / auth / mex, но мой net.tcp ... / filetransfer / mex никогда не отображается в качестве опции. Итак, все отлично компилируется, за исключением того, что я не могу получить доступ к FileTransferServiceClient из своего веб-приложения. Есть идеи, почему ... / filetransfer / mex не отображается? Я использую mexTcpBinding и опубликовал в своем вопросе, как это выглядит. Еще раз спасибо.   -  person Peter    schedule 25.11.2009


Ответы (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" />
person marc_s    schedule 24.11.2009
comment
Похоже, я все еще получаю эту ошибку. Я попробовал ваше предложение, но, похоже, это не помогло. Я обновил свой вопрос - есть еще предложения? Еще раз спасибо. - person Peter; 25.11.2009
comment
Привет, еще раз спасибо. Теперь я могу скомпилировать свой код, но не могу добавить свою службу net.tcp в пользовательский интерфейс ссылок на службы. Кроме того, у меня есть ‹serviceMetadata httpGetEnabled = True /› для службы. Когда я пытаюсь перейти на свой url: net.tcp: // localhost: 2544 / filetransfer / soap в браузере, он сообщает мне, что Firefox не знает, как открыть этот адрес. Когда я пытаюсь просмотреть файл из файла filetransfer.svc (я знаю, что в этом нет необходимости), я получаю знакомое: не удалось найти базовый адрес, соответствующий схеме net.tcp для конечной точки с привязкой NetTcpBinding. - person Peter; 25.11.2009
comment
Хорошо, это решено (и спасибо за ваш ответ). У меня есть связанная проблема, но я сделаю репост. Еще раз спасибо. - person Peter; 26.11.2009
comment
@CodeSherpa, расскажите, пожалуйста, как вы получили сообщение Не удалось найти базовый адрес, соответствующий схеме net.tcp для конечной точки с привязкой NetTcpBinding. Я пробовал этот ответ, но он не работает - person Donald N. Mafa; 22.09.2015

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

Шаг 1. Примечание. Поддержка протокола WAS (Windows Process Activation Service) или протокола, отличного от 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

person Amir Hussein Samiani    schedule 15.05.2012
comment
Спасибо, Амир. Второй шаг помог мне. - person Dev; 31.08.2016
comment
На шаге 2 возникла большая проблема: для решения stackoverflow.com/a/12473835/1141876 использовался PowerShell. - person fiat; 29.08.2018

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

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

person dotnetmem    schedule 04.03.2014

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

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

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

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

person Moumit    schedule 16.03.2016

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

Убедитесь, что вы не используете 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» для «Включенных протоколов» (как описано в других ответах здесь)

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

Не удалось найти базовый адрес, соответствующий схеме 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.

(служба TCP Windows)

NetTcpActivator

Net.Tcp Listener Adapter

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

Установите компонент окна «Активация без Http» из Панели управления -> Программы -> Включение или выключение окна -> Функции -> Добавить функции -> .net framework . * features -> Активация Wcf - > Активация без HTTP.

person Mukul Narad    schedule 08.08.2011

Для Windows 10
Шаг 1. Перейдите в раздел "Включение и отключение компонентов Windows"> .Net Framework 4.6 Advanced Services> WCF Services> TCP Activation.

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

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

person Benj    schedule 24.03.2016

У меня была такая же проблема (среда: 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

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

person Albert    schedule 31.05.2013

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

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

person Paul Cenan    schedule 09.05.2019

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

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

person abdul aquib    schedule 08.03.2021