none
动态加载契约的问题 RRS feed

  • 问题

  • 代码示例如下:
    //通过反射一个服务文件建立HOST
    
    Assembly assService = Assembly.LoadFrom(SvrFileName);
    
    Type a = assService.GetType(service.SvrClassName, true);
    
    host = new ServiceHost(a, baseAddress);
    
    //通过反射一个契约文件建立endpoint
    
    Assembly assContract = Assembly.LoadFrom(service.ContractFileName);
    
    Type c = assContract.GetType(ContractFileName, true);
    
    endpoint = host.AddServiceEndpoint(c, binding, "");  //在这一句报错:在服务"XXX"实现的协定列表中找不到协定名称"YYY"  XXX为服务文件类名  YYY为契约文件类名
    
    

    反射的契约接口和直接引用的契约接口有什么区别吗?

    可是上面我没有说太明白,我再描述一下:
    之前我的契约文件是引用到项目里的,可以通过并正常运行,但我感觉灵活性不好。所以代码别的地方不会有问题的,应该是就反射契约文件时出现的问题。不知道朋友们有没有遇到过?
    为什么要这么做呢?因为我要产生多个Endpoint,每个服务的服务又不相同,所以上面的代码是在一个循环中的。

    现在的问题是以前没有反射过接口,是不是接口是不能用反射来取得的?
    • 已编辑 stulas 2009年9月9日 5:33 补充
    2009年9月9日 3:34

答案

  • //通过反射一个服务文件建立HOST
    
    Assembly assService = Assembly.LoadFrom(SvrFileName);
    
    Type a = assService.GetType(service.SvrClassName, true);
    
    host = new ServiceHost(a, baseAddress);
    
    
    Type c = a.GetInterface(ContractFileName);
    
    endpoint = host.AddServiceEndpoint(c, binding, "");
    问题已解决,是反射的问题,正确代码如上。

    • 已标记为答案 stulas 2009年9月9日 6:25
    2009年9月9日 6:24