2016-09-05 6 views
0

У меня есть служба WCF, на которую ссылается сборка. Эта Ассамблея упоминается в проекте BizTalk. При вызове метода WCF через Orchestration возникла следующая ошибка: Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт SubscriberService.ISubscriber в разделе конфигурации клиента ServiceModel.Biztalk - использование WCF через внешнюю сборку

Я искал его, и это известная проблема, если вы попытаетесь вызвать WCF через сборку в проекте Window или веб-приложении. Это можно решить, если добавить проект в проект, который вызывает сборку. И я протестировал сценарий в примерном проекте, и копирование конфигурации клиента в мой тестовый проект решает проблему, но это не работает в проекте BIZTALK.

конфигурации в App.config файле сборки:

<configuration> 

    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="CustomerMain.HelperAssembly.CoreProcess.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.serviceModel> 
    <protocolMapping> 
     <add binding="basicHttpBinding" scheme="http" /> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_ISubscriber" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:81/SubscriberService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISubscriber" 
      contract="SubscriberService.ISubscriber" name="BasicHttpBinding_ISubscriber" /> 
    </client> 
    </system.serviceModel> 

</configuration> 

конфигурации в файле app.config BizTalk проекта:

<configuration> 

    <system.serviceModel> 
    <protocolMapping> 
     <add binding="basicHttpBinding" scheme="http" /> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_ISubscriber" bypassProxyOnLocal="true" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:81/SubscriberService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ISubscriber" 
      contract="SubscriberService.ISubscriber" name="BasicHttpBinding_ISubscriber" /> 
    </client> 
    </system.serviceModel> 

</configuration> 

Благодарности

ответ

1

Поскольку это BizTalk проект, ответ начинается с не делайте этого.

Хотя вы можете, это не правильный способ вызова службы в приложении BizTalk.

Итак, правильный способ обращения к этому - добавить эту Службу в приложение с помощью BizTalk WCF Adapter.

Если кто-то из вас вызывает какие-либо возражения, мы будем рады помочь вам в решении этих вопросов. Нет никакого сценария, где то, что вы описываете, - это правильная вещь.

+0

Согласен, вам следует позвонить в службу WCF через порт отправки. – Gruff

+0

Совсем согласен с Джоном. Я однажды встретил решение, где они использовали внешнюю сборку для вызова веб-службы из BizTalk. Это вызвало различные проблемы, поскольку это не было многопоточным безопасным, а также неправильно обрабатывало исключения (он просто передал полезную нагрузку на исключение без повышения исключения). Когда я получил бюджет от клиента, это было заменено портом отправки BizTalk, а проект .net был тостом. – Dijkgraaf

+0

Я видел службы, вызванные из BizTalk, таким образом по соображениям производительности - во избежание создания точек сохранения в оркестровке. –