Необходимо создать клиент с помощью svcutil, но получить сообщение об ошибке Метаданные содержат ссылку, которая не может быть решена - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь создать клиентские файлы WCF, используя svcutil.exe.Я запускаю мое приложение wpf, на котором размещена моя библиотека сервисов wcf.Я получаю следующую ошибку при запуске svcutil из командной строки Visual Studio 2010:

URI ошибки обмена метаданными WS: net.tcp: // localhost: 50100 / duplex Метаданные содержат ссылку, которая не может быть разрешена: 'net.tcp: // localhost: 50100 / duplex '.

Может кто-нибудь объяснить, что не так с моим файлом конфигурации, и как я могу успешно сгенерировать файлы клиента, используя svcutil.exe?

Здесьмоя команда svcutil (я, конечно, запускаю эту команду после запуска службы):

c: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC> svcutil.exe net.tcp: // localhost:50100 / duplex / d: c: \ temp

Вот мой app.config для приложения wpf, на котором размещена библиотека службы wcf:

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="baseAddress" value="net.tcp://localhost:50100/duplex"/>
    </appSettings>
    <system.serviceModel>
        <!--<bindings />-->
        <client />
        <services>
            <service name="TrackRejectCommunication.RejectService"
                 behaviorConfiguration="RejectServiceBehavior">
                <endpoint address=""
                      binding="netTcpBinding"
                      bindingConfiguration="DuplexNetTcpBinding_IRejectService"
                      name="netTcp"
                      contract="TrackRejectCommunication.IRejectService" />
                <endpoint name="NetTcpMetadataPoint"
                      address="mexTcp"
                      binding="mexTcpBinding"
                      contract="IMetadataExchange" />
                <host>
                     <baseAddresses>
                    </baseAddresses>
                </host>
            </service>
        </services>
        <bindings>
            <netTcpBinding>
                <binding name="DuplexNetTcpBinding_IRejectService"
                     sendTimeout="00:00:10"
                     portSharingEnabled="false">                       
                  </binding>   
            </netTcpBinding>            
        </bindings> 
        <behaviors>
            <serviceBehaviors>
                <behavior name="RejectServiceBehavior">
                    <serviceDebug includeExceptionDetailInFaults="false" />
                    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:50103/Metadata/Duplex" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>
    <startup>
        <supportedRuntime version="v4.0"
                      sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

Я получаю базовый адрес через менеджер конфигурации вмое приложение wpf.Я использую следующий код для запуска службы в моем приложении wpf:

RejectService rejectService = new RejectService();
//start the reject service.
HostStartup.StartService(rejectService);

Код StartService:

Uri baseAddress = new Uri(ConfigurationManager.AppSettings["baseAddress"]);

//Instantiate new ServiceHost with the singleton instance being passed in
myServiceHost = new ServiceHost(instance, baseAddress);


        //Open myServiceHost
        myServiceHost.Open();

1 Ответ

0 голосов
/ 18 марта 2016

Я столкнулся с подобной проблемой при использовании svcutil для создания wsdl / proxy для одноэлементной службы, запущенной через "myServiceHost = new ServiceHost (instance, baseAddress);" Я смог обойти эту проблему, временно закомментировав код, который создал / открыл экземпляр ServiceHost, затем запустил svcutil для создания wsdl, а затем восстановил код в его первоначальном формате. Похоже, что то, что делает svcutil, несовместимо с экземпляром ServiceHost, инстанцированным в коде.

Для справки, ошибка, с которой я столкнулся, была:

Предупреждение. Произошла ошибка при загрузке экспортируемой службы: ...

Подробности: инициализатор типа для ... сгенерировал исключение.

...