При добавлении ссылки на службу WCF сведения о конфигурации не добавляются в файл web.config. - PullRequest
9 голосов
/ 07 января 2011

Я пытаюсь добавить ссылку на службу WCF в мое веб-приложение, используя VS2010.Кажется, что он добавляет ОК, но web.config не обновляется, что означает, что я получаю исключение времени выполнения:

Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт «CoolService.CoolService» в конфигурации клиента ServiceModelраздел.Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или из-за того, что ни один элемент конечной точки, соответствующий этому контракту, не может быть найден в клиентском элементе.

Очевидно, что служба не определена в моей сети.конфигурации.Шаги для воспроизведения:

  1. Решение правой кнопкой мыши> Добавить> Новый проект> Пустое веб-приложение ASP.NET.
  2. Щелкните правой кнопкой мыши Ссылки на службы в новом веб-приложении> Добавить ссылку на службу.
  3. Введите адрес моей службы и нажмите Go.Моя служба отображается в левой части раздела «Службы», и я вижу все ее операции.
  4. Введите пространство имен для моей службы.
  5. Нажмите кнопку ОК.Ссылка на службу генерируется правильно, и я могу открыть файл Reference.cs, и все это выглядит хорошо.
  6. Откройте файл web.config. Все еще пусто !

    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    
    
    <system.serviceModel>
        <bindings />
        <client />
    </system.serviceModel>
    

Почему это происходит?Это также происходит с консольным приложением или любым другим типом проекта, который я пробую.Любая помощь?

Вот app.config из моей службы WCF:

<?xml version="1.0"?>

<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>

    <services>

      <service name="CoolSQL.Server.WCF.CoolService">

        <endpoint address=""
          binding="webHttpBinding"
          contract="CoolSQL.Server.WCF.CoolService"
          behaviorConfiguration="SilverlightFaultBehavior">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

        <endpoint address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/CoolSQL.Server.WCF/CoolService/" />
          </baseAddresses>
        </host>

      </service>

    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <webHttp />
        </behavior>
        <behavior name="SilverlightFaultBehavior">
          <silverlightFaults />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <bindings>

      <webHttpBinding>
        <binding name="DefaultBinding"
          bypassProxyOnLocal="true"
          useDefaultWebProxy="false"
          hostNameComparisonMode="WeakWildcard"
          sendTimeout="00:05:00"
          openTimeout="00:05:00"
          receiveTimeout="00:00:10"
          maxReceivedMessageSize="2147483647"
          transferMode="Streamed">
          <readerQuotas maxArrayLength="2147483647"
            maxStringContentLength="2147483647" />
        </binding>
      </webHttpBinding>

    </bindings>

    <extensions>
      <behaviorExtensions>
        <add name="silverlightFaults"
          type="CoolSQL.Server.WCF.SilverlightFaultBehavior, CoolSQL.Server.WCF" />
      </behaviorExtensions>
    </extensions>

    <diagnostics>
      <messageLogging logEntireMessage="true"
        logMalformedMessages="false"
        logMessagesAtServiceLevel="true"
        logMessagesAtTransportLevel="false"
        maxMessagesToLog="3000"
        maxSizeOfMessageToLog="2000" />
    </diagnostics>

  </system.serviceModel>

  <startup>
    <supportedRuntime version="v4.0"
      sku=".NETFramework,Version=v4.0" />
  </startup>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging"
        switchValue="Information, ActivityTracing">
        <listeners>
          <add name="messages"
            type="System.Diagnostics.XmlWriterTraceListener"
            initializeData="c:\messages.e2e" />
        </listeners>
      </source>
    </sources>
  </system.diagnostics>

</configuration>

1 Ответ

4 голосов
/ 07 января 2011

Я обнаружил, как обойти это.Моя служба WCF была реализована в своем собственном проекте и размещена в отдельном консольном приложении в том же решении.Если я запускаю службу WCF в качестве проекта запуска решения (например, пусть VS разместит его для меня), то добавление ссылки работает нормально, и правильные строки добавляются в клиент web.config.Но если я размещаю сервис из своего консольного приложения, хотя могу добавить ссылку, клиентский файл web.config не изменяется.Таким образом, обходной путь - сначала позволить VS разместить службу, затем добавить ссылку, а затем изменить службу, которая будет размещена (по тому же адресу и порту) в консольном приложении.

Это удивительное поведение, иМне любопытно, если кто-нибудь может пролить свет на это?

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