C # WCF - ConfigurationErrorsException - PullRequest
0 голосов
/ 17 мая 2011

Я создал (используя онлайн-пример) пользовательскую привязку и пытаюсь ее использовать.К сожалению, мне нужно зарегистрировать новую привязку.

Вот мой файл app.config.

<?xml version="1.0"?>
<configuration>
   <configSections>
      <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="WCFServiceHost.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
    </sectionGroup>
  </configSections>
  <appSettings>
    <add key="ThreadPoolSize" value="10"/>
    <add key="ChunkLength" value="60"/>
    <add key="ClientSettingsProvider.ServiceUri" value=""/>
  </appSettings>
  <system.web>
    <compilation debug="true">
      <assemblies>
        <add assembly="UdpBinding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      </assemblies>
    </compilation>
    <membership defaultProvider="ClientAuthenticationMembershipProvider">
      <providers>
        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri=""/>
      </providers>
    </membership>
    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
      <providers>
        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400"/>
      </providers>
    </roleManager>
  </system.web>
  <system.serviceModel>
    <client>
      <metadata>
        <wsdlImporters>
          <extension type="UdpTransportBinding.UdpTransportElement, UdpTransportBinding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </wsdlImporters>
        <policyImporters>
          <extension type="UdpTransportBinding.UdpBindingCollectionElement, UdpTransportBinding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        </policyImporters>
      </metadata>
    </client>
    <services>
      <service name="TransportService.TransportProtocol" behaviorConfiguration="MyBehavior">
        <endpoint name="NetTcpEndPoint" address="" binding="netTcpBinding" contract="TransportService.ITransportProtocol">
        </endpoint>
        <endpoint name="BasicHttpBinding" address="" binding="basicHttpBinding" contract="TransportService.ITransportProtocol">
        </endpoint>
         <endpoint name="NetUdpEndpoint" address="" binding="udpTransportBinding" bindingConfiguration="config" contract="TransportService.ITransportProtocol">
         </endpoint>
       </service>
    </services>
    <behaviors>
  <serviceBehaviors>
    <behavior name="MyBehavior">
      <serviceMetadata httpGetEnabled="True"/>
      <serviceDebug includeExceptionDetailInFaults="True"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<extensions>
  <bindingElementExtensions>
    <add name="udpTransport" type="UdpTransportBinding.UdpTransportElement, UdpTransportBinding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </bindingElementExtensions>
  <bindingExtensions>
    <add name="udpTransportBinding" type="UdpTransportBinding.UdpBindingCollectionElement, UdpTransportBinding, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </bindingExtensions>
</extensions>
<bindings>
  <udpTransportBinding>
    <binding name="config"/>
    <udpTransport/>
  </udpTransportBinding>
</bindings>

У меня есть app.config, как это, но когдаЯ запустил старый алгоритм и получил эту ошибку:

Не удалось найти расширение привязки конфигурации system.serviceModel / bindings / udpTransportBinding.Убедитесь, что это расширение привязки правильно зарегистрировано в system.serviceModel / extensions / bindingExtensions и правильно написано.

Может кто-нибудь помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 17 мая 2011

Во-первых, вы абсолютно уверены, что это правильная информация о типе / сборке для вашего класса?

UdpTransportBinding.UdpBindingCollectionElement, UdpTransportBinding, Версия = 4.0.0.0, Culture = нейтрально, PublicKeyToken = 31bf3856ad364e35

Один из способов выяснить, где именно возникла проблема с WCF, - включить обработку исключений первого шанса и посмотреть, какой тип WCF получает внутри, прежде чем он сообщит о своей приятной ошибке. Для этого вы можете отключить «Просто мой код» в настройках и отключить обработку исключений в меню «Отладка-> Исключения».

Во-вторых, этот конфиг не может быть правильным:

<udpTransportBinding>    
    <binding name="config"/>
    <!-- this can't be outside the binding -->    
    <udpTransport/> 
</udpTransportBinding>

Вы уверены, что это именно то, что у вас есть? Кроме того, почему вы создаете расширение привязки явно для udpTransportBinding, но затем явно заявляете, что внутри него используется udpTransport? Весь смысл наличия предопределенной привязки состоит в том, что она автоматически выберет этот транспорт по умолчанию. Вы бы действительно хотели, чтобы пользователи указывали элемент привязки udpTransport, только если они определили пользовательскую привязку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...