конечная точка службы wcf пуста - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть этот App.config в моей сервисной библиотеке wcf:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="addr" value="net.tcp://localhost:22222/AdministrationService/"/>
  </appSettings>
  <system.serviceModel>
    <services>
      <service name="Watchman.WcfService.AdministrationService" behaviorConfiguration="MyBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:22222/AdministrationService/"/>
          </baseAddresses>
        </host>
        <endpoint name="Ep1" address="net.tcp://localhost/AdministrationService/" binding="netTcpBinding" bindingConfiguration="DuplexBinding" contract="Watchman.WcfService.Interfaces.IAdministration"/>
        <endpoint name="mex" address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MyBehavior">
          <serviceThrottling maxConcurrentSessions="10000"/>
          <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost/AdministrationService/Ep1/wsdl"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <bindings>
      <netTcpBinding>
        <binding name="DuplexBinding" sendTimeout="00:00:01">
          <reliableSession enabled="true"/>
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
  </startup>

</configuration>

но я получил ошибку:

"The Address property on ChannelFactory.Endpoint was null.  The ChannelFactory's Endpoint must have a valid Address specified."

Похоже, приложение не является конечной точкой tcp.net. Почему?

Ответы [ 3 ]

1 голос
/ 08 сентября 2011

У меня есть этот App.config в моей сервисной библиотеке wcf

Вы не можете иметь app.config в библиотеке классов wcf и ожидать, что WCF будет читать настройки из нее. Это не имеет смысла. Файлы конфигурации, такие как app.config, определяются в конечном проекте исполняемого приложения (например, консольное приложение, WinForms, WPF, ...). Или, если это веб-приложение, вы используете web.config. Но для библиотеки классов не существует app.config. Поэтому вам может потребоваться включить эту конфигурацию WCF в app / web.config приложения, используя вашу библиотеку классов.

0 голосов
/ 11 сентября 2011

Я только что заметил, что svcutil генерирует неверную конечную точку в клиентском проекте wcf. Там

<endpoint binding="basicHttpBinding"
          bindingConfiguration="DefaultBinding_IAdministration" 
          contract="IAdministration" 
          name="DefaultBinding_IAdministration_IAdministration" />"

вместо моей net.tcp конечной точки.

Я также заметил, что это из-за генерации ProxyFile.cs и App.config из

svcutil WcfServiceLibrary.dll

Если я сгенерирую эти файлы из метаданных, например:

svcutil net.tcp://localhost:8080/AdministrationService/mex /language:C# /out:ProxyFile.cs /config:App.config

тогда все работает нормально (в конфиге приложения описана правильная конечная точка net.tcp)

Кто-нибудь знает, почему сотрудничество svcutil с * .dll идет не так?

0 голосов
/ 09 сентября 2011

Вы указали базовый адрес для net.tcp, поэтому адрес в конечной точке net.tcp становится относительным адресом. Таким образом, адрес конечной точки фактически становится net.tcp: // localhost: 22222 / AdministrationService / localhost / AdministrationService /.

Измените адрес конечной точки на относительный адрес и заново сгенерируйте прокси-класс, используя svcutil.

...