我正在尝试创建一个在 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/