Конфигурация WCF для конечной точки в другом проекте - PullRequest
0 голосов
/ 14 июля 2011

У меня есть два проекта в одном решении. Один проект, назовем его MainProject, становится исполняемым. Другой проект, назовем его ControlsProject, содержит UserControl и ссылается (и используется) в MainProject. ControlsProject также имеет ссылку на сервис WCF.

У меня есть два вопроса относительно этой конфигурации:

  1. Могу ли я просто скопировать конфигурацию WCF из ControlsProject в MainProject (что, как я полагаю, не могу, в соответствии с " Как включить конфигурацию конечной точки веб-ссылки в другой проект ")
  2. В конфигурации ControlsProject контракт не имеет полностью определенного пространства имен, а скорее такого имени, как 'ServiceName.IServiceInterfaceName'. Каким должно быть имя контракта, поскольку выводом ControlsProject будет файл, расположенный в папке bin в MainProject?

Я попытался просто скопировать конфигурацию, но получил исключение: "Could not find default endpoint element that references contract 'MyService.IMyService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element." Когда я скопировал конфигурацию, я полностью определил имя интерфейса как ControlsProject.MyService.IMyService.

Любая помощь, которую вы можете оказать, приветствуется!

ОБНОВЛЕНИЕ (14.07.2011 17:28 EST)

Вот фрагмент из моего клиента app.config:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_IStatService" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default" />
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://intranet/StatService.svc"
            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IStatService"
            contract="StatService.IStatService" name="BasicHttpBinding_IStatService" />
    </client>
</system.serviceModel>

Вот фрагмент из моего веб-сервиса web.config:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

1 Ответ

0 голосов
/ 14 июля 2011

Каждый раз, когда вы видите «Не удалось найти элемент конечной точки по умолчанию для такого-то и такого-то контракта», тогда ваш фактический контракт (интерфейс) неправильно указывается в файле app.config.Перейдите к контракту интерфейса в проекте элементов управления, дважды проверьте пространство имен, в котором оно находится, вам нужно именно это пространство имен. «Имя интерфейса» в качестве элемента контракта в app.config.Вы также должны убедиться, что ваш сервис name = Namespace.MyService является правильным пространством имен и классом.Один короткий способ узнать, правы ли вы (это только в том случае, если у вас есть инструмент для изменения резкости), в appconfig, где вы объявляете имя службы = поместите курсор на имя и пространство имен службы и нажмите F12, если это вас никуда не приведетвы ссылаетесь на пространство имен и класс, которые не существуют, то же самое относится и к контракту =, если вы F12 по этому контракту и не берете вас туда, на него не ссылаются правильно (возможно, с ошибкой).

...