【问题标题】:Provide ServiceKnownType during runtime?在运行时提供 ServiceKnownType?
【发布时间】:2010-06-15 09:46:14
【问题描述】:

我有一个工作 WCF 接口,在合同中使用了 100 多个 ServiceKnownType,如下所示:

[ServiceKnownType(typeof(RowUser))]
[ServiceKnownType(typeof(RowRegion))]
[ServiceKnownType(typeof(RowDocument))]
[... loads more ...]
[ServiceContract(SessionMode = SessionMode.Required)]
public interface IServiceBrowse : IDisposable
{
  [OperationContract]
  void Insert(Row satz);
}

有没有办法在运行时提供这些 ServiceKnownTypes?
在源代码中添加所有这些 ServiceKnownTypes 不仅容易出错且乏味,而且它使我的程序集以我不喜欢的方式捆绑在一起(我希望能够将这些类型提取到子程序集中以解耦它们,但不能,因为服务需要列出所有已知类型)。

【问题讨论】:

    标签: c# wcf servicecontract


    【解决方案1】:

    是的。

    ServiceKnownTypeAttribute 允许您将方法名称指定为第一个参数,然后是包含实现该方法的 System.Type 的参数。

    指定的方法必须是静态和公共的,并且返回类型为 IEnumerable。

    [ServiceKnownType("RegisterKnownTypes", typeof(Services))]
    public class Services : IServices
    {
        static public IEnumerable<Type> RegisterKnownTypes(ICustomAttributeProvider provider)
        {
        }
    }
    

    另见http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceknowntypeattribute.aspx

    【讨论】:

    • 顺便说一句,辅助类 Services 既不需要公开也不需要继承 IServices。
    猜你喜欢
    • 2010-09-20
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多