如何在没有svcutil的情况下创建客户端代理或在wcf中添加服务引用?

Emb*_*rja 12 wcf

如何在没有svcutil.exe的情况下创建客户端代理或在wcf中添加服务引用?我想在编译时创建一个客户端代理.

mar*_*c_s 11

如果您可以在单独的DLL中访问服务协定(IService接口),则可以添加对该服务协定DLL的引用,然后执行以下操作:

NetTcpBinding binding = new NetTcpBinding();
EndpointAddress address = new EndpointAddress("net.tcp://localhost:9000/YourService")

ChannelFactory<IService> factory = new ChannelFactory<IService>(binding, address);
IService proxy = factory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)

然后你有了以编程方式创建的代理,您现在可以根据需要使用它.


And*_*mes 7

这可能不是你想要的,但它非常有趣.

Vipul Modi有一个库,允许您在下载WSDL之后调用WCF服务,所有这些都在运行时完成.

Vipul Modi的图书馆(最新版本)

允许你做这样的事情:

创建ProxyFactory,指定服务的WSDL URI.

DynamicProxyFactory factory = new DynamicProxyFactory("http://localhost:8080/WcfSamples/DynamicProxy?wsdl");
Run Code Online (Sandbox Code Playgroud)

浏览端点,元数据,合同等.

  • factory.Endpoints
  • factory.Metadata
  • factory.Contracts
  • factory.Bindings

通过指定端点或合同名称,为端点创建DynamicProxy.

DynamicProxy proxy = factory.CreateProxy("ISimpleCalculator");
Run Code Online (Sandbox Code Playgroud)

//要么

DynamicProxy proxy = factory.CreateProxy(endpoint);
Run Code Online (Sandbox Code Playgroud)

在DynamicProxy上调用操作

double result = (double)proxy.CallMethod("Add", 1d ,2d);
Run Code Online (Sandbox Code Playgroud)

关闭DynamicProxy

proxy.Close();
Run Code Online (Sandbox Code Playgroud)


Ric*_*ard 5

您不需要编码生成(或使用充满WCF细节的配置文件).

首先创建定义service([ServiceContract])的接口,其中包含与服务实现分开的程序集中的任何支持数据协定.

引用客户端程序集中的接口程序集.

然后需要创建一个客户端代理,用于IMyService:

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress(url);
ChannelFactory<IMyService> chanFac = new ChannelFactory<IMyService>(binding, endpoint);
IMyService clientProxy = chanFac.CreateChannel();
Run Code Online (Sandbox Code Playgroud)