wcf服务端点为null

时间:2011-09-08 19:46:36

标签: c# .net-4.0 wcf wcf-endpoint

我的wcf服务库中有这个App.config:

<?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 个答案:

答案 0 :(得分:1)

  

我的wcf服务库中有这个App.config

你不能在wcf类库中拥有app.config,并期望WCF从中读取设置。这没有意义。 app.config等配置文件在最终的可执行应用程序项目中定义(例如Console应用程序,WinForms,WPF,...)。或者,如果它是Web应用程序,则使用web.config。但是类库没有app.config这样的东西。因此,您可能需要使用类库在应用程序的app / web.config中包含此WCF配置。

答案 1 :(得分:0)

您已为net.tcp指定了基本地址,因此net.tcp端点上的地址将成为相对地址。因此,有效地终点的地址变为net.tcp:// localhost:22222 / AdministrationService / localhost / AdministrationService /。

将端点上的地址更改为相对地址,然后使用svcutil重新生成代理类。

答案 2 :(得分:0)

我刚注意到svcutil在wcf客户端项目中生成了坏端点。有

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

而不是我的net.tcp端点。

我也观察到这是因为从

生成了ProxyFile.csApp.config
svcutil WcfServiceLibrary.dll

如果我从元数据生成此文件,如:

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

然后它工作正常(在App配置中描述了正确的net.tcp端点)

有谁知道为什么合作svcutil与* .dll出错?