繁体   English   中英

向WCF .svc文件添加参数

[英]Adding a parameter to a WCF .svc file

我希望能够通过在service.svc文件中放置一个参数来将应用程序特定的配置信息传递给WCF。

我有一个标准错误记录Web服务,可以从其他应用程序中调用。 我希望能够使用不同的名称调用该服务,并使该服务知道其调用方式并写入不同的文件。 例如,应用程序将调用Warning.svc,Serious.svc或Critical.svc,并根据调用的内容将消息写入相应的文件。

因此,我的想法是在.svc文件中放置一个参数,以告诉WCF如何调用它。 如果不是这样,是否有办法从我的代码中获取svc文件的名称?

我知道我可以为每个调用使用不同的方法,但是当我想添加其他类型时,需要修改WCF。 我可以只添加另一个.svc,而无需修改任何代码即可添加功能。

您可以在svc文件<%@ ServiceHost %>标记中指定自定义ServiceHostFactory,然后将service属性用于所需的任何内容。 此值将传递到SHFactory,您可以在其中解析它并使用它初始化ServiceHost。

这是一个仅反映默认WCF行为的示例:

Service1.svc:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfService2.Service1" Factory="WcfService2.CustomServiceHostFactory" CodeBehind="Service1.svc.cs" %>

CustomServiceHostFactory.cs:

namespace WcfService2
{
    using System;
    using System.ServiceModel;
    using System.ServiceModel.Activation;

    public class CustomServiceHostFactory : ServiceHostFactoryBase
    {
        public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            var host = new ServiceHost(Type.GetType(constructorString), baseAddresses);
            host.AddDefaultEndpoints();
            return host;
        }
    }
}

我认为您无法在.svc文件中执行此操作。

但是,这似乎是一种复杂的处理方式,根本不是典型的Web服务风格。 对于本质上相同的Web服务,您应该没有太多的端点,只有很小的差异。 将来这将是一场噩梦。

为什么不能修改方法以接受另一个参数,它是字符串或枚举,还是表示要登录到哪个文件的参数? 如果传递null,则写入默认值。 这是通常在通用日志记录包中完成的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM