![](/img/trans.png)
[英]RESTful WCF Services with No svc file and No config with parameter binding
[英]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.