Не удалось найти базовый адрес, соответствующий scheme net.протокол TCP

я переместил службу передачи файлов из basicHttpBinding в netTcpBinding поскольку я пытаюсь настроить канал дуплексного режима. Я также запустил свою сеть.протокол 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>

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

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

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

какие идеи?


UPDATE: я думал, что он работает, но он все еще не работает. Вот что у меня сейчас: Я все еще получаю "не удалось найти базовый адрес, который соответствует схеме 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 в моем приложении.конфигурационный файл:

<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 в моем веб-приложении.

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

8 ответов


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

обновление: если вы хотите иметь возможность получать метаданные в сети.Базовый адрес TCP, вам нужно будет выставить сеть.Конечная точка Tcp MEX, как это внутри вашего :

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

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

Шаг 1: Записка (служба активации Windows) или non-поддержка HTTP протокола, поддерживается только следующими платформами: * Windows Vista * Windows 7 * Windows Server 2008

  1. перейти, чтобы включить или выключить функции Windows
  2. перейдите в Microsoft .NET Framework 3.5
  3. Проверьте активацию HTTP Windows Communication Foundation
  4. Проверьте активацию Windows Communication Foundation без HTTP

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


пробел в записи "Enabled Protocols" в IIS => выберите virtual Directory/application => advanced settings => Enabled Protocols. например,http, net.tcp. (Пробел между текстом протокола

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


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

убедитесь, что вы не использование 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 и в интернете.свойства csproj (или аналогичные) и левая вкладка" Web". Существует флажок "Использовать IIS Express". Снять флажок что.

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

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

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

тогда вам нужно добавить " net.труба " в список.

пример:

http, net.tcp, net.труба!--4-->

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

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

также: проверьте эти соответствующие службы windows (именованные каналы или tcp или оба)

(именованные каналы Windows service)

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.

установите компонент окна "активация без Http" с панели управления - > Программы - > включить или выключить окно - > функции - > добавить функции - > .net framework . * особенности - > активация Wcf - > активация без Http.


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

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

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

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

проверьте, решена ли ваша проблема после завершения step2..если нет, то следуйте ниже шаг

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

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

enter image description here


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

надеюсь, что это поможет Альберт!--1-->


Для Windows 10
Шаг 1: Перейдите к включению и выключению компонентов Windows > расширенные службы .Net Framework 4.6 > службы WCF > активация TCP

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

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