.net - 使用 WCF 服务将代理类强制转换为公共(public)接口(interface)

标签 .net wcf

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

使用该服务时

Project -> Add Service Reference

然后尝试使用基本接口(interface)而不是代理接口(interface),我得到了一个转换错误,代码如下:

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

这是项目/类的布局:

公共(public)图书馆计划

[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();

抛出编译时错误:缺少显式转换。

(注意客户端项目引用公共(public)图书馆项目)

最佳答案

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

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

  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();
  }

关于.net - 使用 WCF 服务将代理类强制转换为公共(public)接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813278/

相关文章:

c# - 如何从 C# 代码与命令提示符进行交互?

c# - 异步 WCF 方法 WebOperationContext 在等待后为 null

.net - 为什么我们需要整合不同版本的包?

c# - 根据方法参数生成唯一的缓存键

c# - 使用 ModuleBuilder 将类标记为 `internal static`

c# - 读取 XML 数据时已超出最大字符串内容长度配额 (8192)

entity-framework - 实体可以提供给英国而不在 View 模型中重复吗?

.net - 功能键的标准操作列表

c# - 网络 TCP 绑定(bind) : The URI prefix is not recognized

wcf - 如何将 log4net 附加程序设置为 Wcf 服务?