我正在创建一个ServiceFactory来控制通过IIS 7公开的服务的内部化。
然而,我对ServiceHost的行为感到惊讶。虽然我有0个服务配置文件,但无论我在哪里初始化一个新的ServiceHost,如下所示:
var host = new ServiceHost(typeof(MyService), baseAddresses);
接下来我只想在构建处于调试模式时添加一些行为:
#if DEBUG
host.Description.Behaviors.Add(new ServiceDebugBehavior());
#endif
但是此代码失败导致ServiceDebugBehavior已经应用!尽管我没有配置文件,并且没有应用于服务类的属性,但主机已经具有此行为并且还应用了5个!
这是预期的行为吗?如果我想在发布版本上禁用ServiceDebugBehavior会怎样?
提前致谢,
答案 0 :(得分:5)
不容易 - 没有任何设置我知道只是将其关闭。问题确实是:你从中得到了什么好处?
从我看到的,大多数这些行为都非常重要 - 身份验证和服务凭据等等。如果它们默认存在,即使没有配置,我也会相信它们是有原因的。
但如果你真的想要,你可以随时创建自己的CustomServiceHost
并在课堂上做任何你喜欢的事情 - 包括抛弃所有预定义的行为,如果你愿意的话。
如果你想要,例如启用服务的服务调试行为的IncludeExceptionDetailsInFaults
设置,尝试以下类型的代码:
ServiceDebugBehavior behavior =
host.Description.Behaviors.Find<ServiceDebugBehavior>();
if(behavior != null)
{
behavior.IncludeExceptionDetailInFaults = true;
}
else
{
host.Description.Behaviors.Add(
new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true });
}
在这种情况下,如果ServiceDebugBehavior
已经存在,您可以找到它并将该属性设置为true - 否则您将创建并添加新的ServiceDebugBehavior
。我觉得很容易。
答案 1 :(得分:0)
您不应在#if DEBUG中创建服务调试行为,而只需设置要从默认值更改的属性的值。