使用WCF服务将代理类转换为通用接口

时间:2010-05-11 18:12:04

标签: .net wcf

我正在尝试创建在WCF Web服务和本地数据服务之间共享的公共服务库。但是,在尝试通过单击

来使用该服务时
  

项目 - >添加服务参考

然后尝试使用基本接口而不是代理接口我使用以下代码获得了强制转换错误:

IMyService _context = (IMyService)new ServiceReference.MyService();

这是项目/类的布局:

公共图书馆计划

[ServiceContract]
public interface IMyService
{
     [OperationContract]
     void DoWork();
}

网络服务项目

public partial class MyService : IMyService
{
    public void DoWork()
    {
    //DO STUFF
    }
}

客户项目

IMyService _context = (IMyService)new ServiceReference.MyService();
抛出

运行时错误:无法转换对象。

IMyService _context = new ServiceReference.MyService();
抛出

编译时错误:缺少显式强制转换。

(请注意,Client Project引用了Common Library Project)

2 个答案:

答案 0 :(得分:3)

如果您控制电线的两侧,您还可以通过代码生成动态代理。您可以通过添加Web引用在没有生成代理的情况下工作。对于我的公司,这更好用,因为在我们的构建服务器上编译期间,接口中的更改将直接显示。当我们使用Web引用时,这些接口中断会在测试我们的应用程序时出现。

这是我们用来动态生成代理的。也许这也适用于你的场景。

  private void CreateDynamicProxy()
  {
     var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(TServerInterface)), new BasicHttpBinding(), new EndpointAddress(EndpointAddress));
     var channelFactory = new ChannelFactory<IMyInterface>(endPoint);
     IMyInterface myInterface = channelFactory.CreateChannel();
     myInterface.MyMethod();
     ((IChannel) myInterface).Close();
  }

答案 1 :(得分:0)

你不应该抛出它,因为返回的类实现了接口,只需删除强制转换。