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

Я создаю обработчик событий в MS Project Server. Этот обработчик событий вызывает библиотеку классов (файл dll). Обработчик событий устанавливается и запускается из MS Project щелчками, а не кодом. В этой библиотеке классов у меня есть ссылка на веб-службу. Но всякий раз, когда событие запускается, я вижу следующую ошибку при отладке библиотеки классов с помощью параметра «Присоединиться к процессу»:

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

Вот как выглядит мой app.config:

    <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="basicHttpBehavior">
          <clientCredentials>
            <windows allowedImpersonationLevel="Impersonation" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpConf" sendTimeout="01:00:00" maxBufferSize="500000000"
          maxReceivedMessageSize="500000000">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="500000000" />
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm"
              realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
        <binding name="ProjectSoap">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Ntlm" proxyCredentialType="Ntlm" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcProject.Project"
        name="basicHttp_Project" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcResource.Resource"
        name="basicHttp_Resource" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/ProjectServer.svc"
        behaviorConfiguration="basicHttpBehavior" binding="basicHttpBinding"
        bindingConfiguration="basicHttpConf" contract="SvcStatusing.Statusing"
        name="basicHttp_Statusing" />
      <endpoint address="http://xxxx/pwa/_vti_bin/PSI/Project.asmx?wsdl"
        binding="basicHttpBinding" bindingConfiguration="ProjectSoap"
        contract="PSS.Project.ProjectSoap" name="ProjectSoap" />
    </client>
  </system.serviceModel>
</configuration>

Я также подтвердил, что URL: http://xxxx/pwa/_vti_bin/PSI/Project.asmx?wsdl работает.

В файле cs ошибка появляется в следующем коде:

ProjectSoapClient projectSvc = new ProjectSoapClient();

Когда я делаю то же самое в консольном приложении, он работает, но когда я использую библиотеку классов, он терпит неудачу. Я прочитал здесь несколько вопросов и ответов, и я знаю, что когда я вызываю ссылку на службу из библиотеки классов, мне нужно включить файлы конфигурации ссылки на службу в библиотеку классов, но я не совсем уверен, как и куда передать config в моем случае и в какую часть app.config я должен его добавить.


person Bazinga4096    schedule 14.07.2013    source источник


Ответы (1)


Мне удалось вызвать службу WCF в DLL приемника событий Project Server.

Для этого выполните следующие "уловки":

1.- Для целей настройки DLL (вы кодируете) выполняются в процессе Microsoft.Office.Project.Server.Eventing.exe, который находится (в конфигурации по умолчанию) в: «C: \ Program Files \ Microsoft Office Servers. \ 14.0 \ Корзина ". Для выборочной установки откройте диспетчер задач, щелкните правой кнопкой мыши «Microsoft.Office.Project.Server.Eventing.exe» и выберите «Перейти к файлу». Таким образом, любая конфигурация, которую необходимо записать в файл, должна быть помещена в этот каталог вместе с файлом: «Microsoft.Office.Project.Server.Eventing.exe.config». Я использовал этот файл для размещения строки подключения к базе данных и смог прочитать его с помощью библиотеки System.Configuration. Однако не все разделы конфигурации работают, я попытался поставить appSettings и возникла ошибка Sharepoint.

2.- Для взаимодействия с Project Servers PSI используйте интерфейс WCF вместо интерфейса ASMX (я не знаю почему, но он работает намного лучше). Я предлагаю использовать WCF программно (быстрый поиск в Google покажет вам, как установить привязки в коде).

Надеюсь, это вам поможет, уверяю, работает. Теперь я пытаюсь вызвать службу ASMX в DLL (я все еще на ней, если найду что-нибудь, я опубликую).

person Lucke    schedule 13.09.2013