0

我对 WCF 完全陌生,我仍在学习基础知识。到目前为止我学到的是我可以创建一个服务并在服务的配置文件中配置它的端点和行为。当我通过 Visual Studio 运行我的服务时,将创建一个默认应用程序,该服务将成功托管在 IIS 中,一切正常。

现在,当我为我的服务创建一个主机应用程序时,我发现我应该在代码中再次为我的服务添加服务端点(和行为),如下所示:

ServiceHost host = new ServiceHost(typeof(HelloService));
host.AddServiceEndpoint(typeof(IHelloWorld), 
                        new WSHttpContextBinding(), 
                        "http://localhost:8873/helloworld/ws");

host.Open();

foreach (var se in host.Description.Endpoints)
{
    Console.WriteLine(se.Address);
}

host.Close();
Console.Read();

或者我可以在主机应用程序的配置文件中进行

所以这是我的问题:

  1. 当它在主机应用程序中甚至没有用时,在服务自己的配置文件中定义端点有什么意义?

  2. 还是该服务的配置文件仅适用于 IIS 和托管主机?

  3. 最后有没有办法在宿主应用程序中拥有服务自己的配置(不再在宿主应用程序中定义端点和行为)或者提到的两个配置完全不同?

编辑

我的最终问题是,如何在主机应用程序中使用服务配置文件中定义的配置?(不使用主机应用程序自己的配置文件或创建额外的代码来定义新的端点和行为)

4

1 回答 1

1

现在,当我为我的服务创建一个主机应用程序时,我发现我应该在代码中再次为我的服务添加服务端点(和行为)

这是不正确的。您根本不必在代码中定义服务端点。这就是配置文件的用途。

只需将您的服务名称(在您的配置文件中定义)作为类型传递给您的服务主机构造函数:

var host = new ServiceHost(typeof(MyNamespace.MyService));

配置定义为:

<system.serviceModel>
    <services>
      <service name="MyNamespace.MyService" behaviorConfiguration="MyServiceBehavior">
        <endpoint address="MyService"
                  binding="basicHttpBinding"
                  contract="MyNamespace.IMyService" />

        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange" />

        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8456/"/>
          </baseAddresses>
        </host>
      </service>
    </services>

    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

WCF 将确定您要使用配置文件来定义要运行的服务。

于 2015-09-04T15:06:29.600 回答