2016-09-20 16 views
0

Я следую за этим блогом CONFIGURING WCF SERVICE WITH NETTCPBINDING шаг за шагом, когда я добавляю ссылку на сервис с VS 2013 года, я получил ошибку ниже.Использование WCF netTcpBinding в IIS

The URI prefix is not recognized. 
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/WCFNetTcp/WCFNetTcpService.svc/mex'. 
You have tried to create a channel to a service that does not support .Net Framing. It is possible that you are encountering an HTTP endpoint. 
Expected record type 'PreambleAck', found '72'. 

Мой настроить файл Сервис ниже:

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="netTcpb" name="WCFNetTcp.WCFNetTcpService"> 
     <endpoint address="" binding="netTcpBinding" bindingConfiguration="portSharingBinding" contract="WCFNetTcp.IWCFNetTcpService" /> 
     <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" /> 
     <!--<endpoint address="mexHttp" binding="mexHttpBinding" contract="IMetadataExchange" />--> 
     <host> 
      <baseAddresses> 
      <!--<add baseAddress="net.tcp://localhost:6666/WCFNetTcpService/"/>--> 
      <add baseAddress="net.tcp://localhost:808/WCFNetTcp/WCFNetTcpService.svc" /> 
      <!--<add baseAddress="http://local/WCFNetTcp"/>--> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="netTcpb"> 
      <serviceMetadata httpGetEnabled="false"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <netTcpBinding> 
     <binding name="portSharingBinding" portSharingEnabled="true"/> 
     </netTcpBinding> 
    </bindings> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> 
     <baseAddressPrefixFilters> 
     <add prefix="net.tcp://localhost:808"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
    </system.serviceModel> 

Я пытался любой net.tcp URL, что я мог думать, но все они не работают. Кажется, что основной адрес не работал, когда служба размещена в IIS, это зависит от URL-адреса в IIS. Если я создаю службу, размещенную в консольном приложении с ниже конфигурационным файлом, она работает.

<system.serviceModel> 
    <behaviors> 
    <serviceBehaviors> 
     <behavior> 
     <serviceMetadata httpGetEnabled="false"/> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="WCFNETTCP.Service1"> 
      <endpoint address="" binding="netTcpBinding" contract="WCFNETTCP.IService1"> 
      </endpoint> 
      <!--comment out after you add service reference--> 
      <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="net.tcp://xxx:6666/WCFNETTCP/" /> 
        <add baseAddress="http://xxx:6667/WCFNETTCIP"/> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 
</system.serviceModel> 

Было бы полезно, если бы вы могли поделиться нами, как заставить его работать под IIS.

+0

Вы правы, базовый адрес игнорируется в IIS (он использует URL, сгенерированный IIS). Вы пробовали добавить его через http? – Tim

+0

@Tim Да, я попробовал, и ссылка на службу добавлена, но когда я запустил клиент службы по URL net.tcp, я снова получил эту ошибку. –

ответ

0

Кажется, что что-то не так в моем IIS. Я решил эту проблему, выполнив следующие шаги.

  1. Переустановка IIS
  2. переустанавливать WCF Non-HTTP активация в Windows, имеется
  3. перерегистрировать ASP.NET в IIS с помощью этой команды

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319> dis/online/enable-feature/featurename: IIS-ASPNET45

  1. Проверьте настройки в IIS, которые не меняются на моей стороне.
  2. Восстановите мою службу WCF и успешно добавьте ссылку на службу.
    Надеюсь, это будет для вас работа.