У меня есть проблема с подключением к службе WCF с пользовательской конечной точкой.Адрес изменения WCF во время выполнения
У меня есть excel addin, который общается с базой данных через службу WCF. Я создал сервис, и все работает нормально. Служба WCF указана в ServiceReference моего проекта Excel addin.
Но теперь у меня есть возможность установить сервер, на котором запущена служба WCF. Поэтому я разрешаю пользователю вводить URI службы, и я пытаюсь создать ServiceClient со связыванием и EndpointAdrress. Но если я создаю ServiceClient с EndPointAddress сервера, то EndpointNotFoundException будет поднят, даже если адрес сервера будет таким же, как из ServiceReference.
Я думаю, что может возникнуть проблема в файлах app.config и web.config, но я не знаю, где.
App.Config (Excel Addin)
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ICampaignService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:58375/CampaignService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICampaignService"
contract="CampaignDatabaseService.ICampaignService" name="BasicHttpBinding_ICampaignService" />
</client>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Web.Config (службы WCF)
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="CampaignDatabase" connectionString="Data Source=dev\sql14;Initial Catalog=TSQL2012;Integrated Security=True;User id=addin_test;Password=testpassword;"/>
</connectionStrings>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true"/>
</system.webServer>
</configuration>
И это, как я создаю ServiceClient
EndpointAddress serviceAddress = new EndpointAddress(Properties.Settings.Default.serviceAddress);
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
CampaignServiceClient connector = new CampaignServiceClient(binding,serviceAddress);
Благодарим Вас за мнения
Просьба также показать фактический код, который вы используете для динамического привязки к новой конечной точке. –
Вы пытаетесь запустить это на своей машине разработки или на машине пользователя? Вызов службы на локальном хосте будет только найти службу, если она работает на том же компьютере, что и надстройка. – dbugger
Прямо сейчас, я только отлаживаю это решение в Visual Studio. Но основная идея заключается в том, что служба WCF может быть установлена на разных компьютерах, а пользователь в Excel addin может ввести адрес сервера, на котором работает служба. И addin будет использовать этот адрес для подключения к службе WCF. –