以编程方式编辑System.Servicemodel值?

时间:2011-07-14 12:17:04

标签: wcf web-config

使用WCF时,web.config中有一个部分如下所示。

<system.serviceModel>
   <services>
      <service name="abc">
        <endpoint /> <---this
      </service>
   </services>
</system.serviceModel>

是否可以编辑我以编程方式标记的区域?

我可以看到有一个sytem.serviceModel命名空间,但除此之外我有点迷失。

2 个答案:

答案 0 :(得分:3)

如果要在运行时更改这些参数,可以覆盖ServiceHost.OnOpening() 例如。改变港口:

protected override void OnOpening()
{
    foreach (ServiceEndpoint endpoint in Description.Endpoints)
    {
        string uriString = string.Format("{0}://{1}:{2}{3}",
            endpoint.Address.Uri.Scheme,
            endpoint.Address.Uri.Host,
            endpoint.Address.Uri.Port + _basePort,
            endpoint.Address.Uri.LocalPath);

        endpoint.Address = new EndpointAddress(uriString);
    }

    base.OnOpening();
}

答案 1 :(得分:2)

为了补充Mike Mozhaev的答案,由于您的服务托管在IIS中,因此您需要ServiceHostFactory来获取对服务主机的引用(或使用您自己的主机)。在http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/14/wcf-extensibility-servicehostfactory.aspx处有一些相关信息。