小弟刚刚学习WCF,接触没有几天,做了个实例,下列描述中,可能有些理解错误,或者不适当的地方,请指正....实例中包含了四个项目,分别作如下介绍
Client:控制台应用,模拟服务的客户端
Contracts:类库项目,用于定义服务契约(Service Contract)
Hosting:控制台应用,实现对定义在Services项目中的服务寄宿
Services:类库项目,提供对WCF服务的实现目前这个项目,我是利用编码的方式创建的终结点,现在都可以正常运行,但是我想要利用config配置文件创建终结点,这样问题就来了,不会弄...问题暂时放着,先确定下我对实例的理解是否正确,如果有理解不正确的地方,希望大家给予指正,谢谢。首先:我要先开启服务端服务,那么就要依赖宿主,就要创建服务寄宿(创建进程供服务运行),可是一旦创建服务,就必须至少拥有一个终结点,只要终结点配置好了,那么就说明服务端服务已经运行,这样也就可以了...如果理解没错的话,就开始解决终结点配置方面的相关问题吧...利用编码创建终结点的源码:
namespace WCFTst.Hosting
{
    class Program
    {
        static void Main(string[] args)
        {
             //利用编码方式进行终结点的添加和服务行为的定义
            //创建服务寄宿 serviceHost
            using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
            {
                host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/aaa");
                if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                {
                    //创建元数据,通过元数据形式发布wcf服务描述
                    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                    behavior.HttpGetEnabled = true;
                    behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata");
                    host.Description.Behaviors.Add(behavior);
                }
                host.Opened += delegate
                {
                    Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
                };
                //在调用ServiceHost的Open方法对服务成功寄宿后,
                //我们可以通过该地址获取服务相关的元数据。
                //在IE地址栏上键入http://127.0.0.1:9999/calculatorservice/metadata,你将会得到以WSDL形式体现的服务元数据
                host.Open();
                Console.Read();
            }
            
        }
    }
}<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="aaa">
        <endpoint address="http://127.0.0.1:8080/aaa" binding="wsHttpBinding" contract="WCFTst.Contracts.ICalculator"></endpoint>
      </service>
    </services>
  </system.serviceModel>
</configuration>

解决方案 »

  1.   

    配置文件中:<service name="aaa">
    这里的name不能乱填,必须填写CalculatorService类的全名(命名空间+类名)
      

  2.   


    还要是要放在创建服务的项目中,也就是CalculatorService所在的项目?
      

  3.   

    配置文件是在启动服务的项目中的,不是CalculatorService所在项目。
    你的using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))过程,会自动检测当前程序对应的config文件里面有没有CalculatorService全名的service节点,找到就自动加载该节点配置。
      

  4.   


    嗯,搞定了,贴下代码,留用...<?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <serviceBehaviors>
            <behavior name="metadataBehavior">
              <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/CalculatorService/metadata" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        <services>
          <service behaviorConfiguration="metadataBehavior" name="WCFTst.Services.CalculatorService">
            <endpoint address="http://127.0.0.1:9999/CalculatorService"
                        binding="wsHttpBinding"
                        contract="WCFTst.Contracts.ICalculator" />
          </service>
        </services>
      </system.serviceModel>
    </configuration>
      

  5.   

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
           <services>
          <service behaviorConfiguration="myBehavior"  name="Services.TestService" >
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:5010/TestService"/>
              </baseAddresses>
            </host>
            <endpoint address=""
                      binding="netTcpBinding"
                      contract="Services.ITestContract" />
            <endpoint address="mex" 
                      binding="mexTcpBinding" 
                      contract="IMetadataExchange"></endpoint>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="myBehavior">
              <serviceMetadata/>
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel></configuration>
    nettcp方式