我想在我的 WCF 客户端代理代码中为每个服务操作添加一个额外的方法(即从ClientBase
. 我已经编写了一个具有IOperationContractGenerationExtension
实现的 Visual Studio 扩展,但是这个接口似乎只公开了修改服务接口的能力,而不是 -ClientBase
派生类。
有没有办法在代理客户端类中生成新方法?
我想在我的 WCF 客户端代理代码中为每个服务操作添加一个额外的方法(即从ClientBase
. 我已经编写了一个具有IOperationContractGenerationExtension
实现的 Visual Studio 扩展,但是这个接口似乎只公开了修改服务接口的能力,而不是 -ClientBase
派生类。
有没有办法在代理客户端类中生成新方法?
据我所知,这些类总是部分类:
public partial class MyWCFServiceClient : ClientBase<IMyWCFService>, IMyWCFService
{
...
}
因此您可以使用自己的第二个文件轻松扩展它们,该文件将方法添加到同一个部分类:
你的文件.cs
public partial class MyWCFServiceClient
{
public void NewMethod1()
{
}
public void NewMethod2()
{
}
}
我通过在导入过程中为 ClientBase 派生类生成一个包装类来解决这个问题。实际上,我首先尝试生成一个与客户端类同名的附加部分类,但这导致其余代码生成停止正常工作。
所以我最终生成的代码看起来像:
(由内置的 WCF 代理生成器生成):
public interface ServiceReference1
{
IAsyncResult BeginWebMethod1(AsyncCallback callback, object asyncState);
void EndWebMethod1(IAsyncResult result);
IAsyncResult BeginWebMethod2(AsyncCallback callback, object asyncState);
void EndWebMethod2(IAsyncResult result);
// ...
}
public class ServiceReference1Client
{
public event EventHandler<AsyncCompletedEventArgs> WebMethod1Completed;
public event EventHandler<AsyncCompletedEventArgs> WebMethod2Completed;
public void WebMethod1Async() { /* ... */ }
public void WebMethod2Async() { /* ... */ }
// ...
}
(由我的自定义生成IOperationContractGenerationExtension
):
public class ServiceReference1Wrapper
{
private ServiceReference1Client _client;
public ServiceReference1Wrapper(ServiceReference1Client client)
{
_client = client;
}
public IObservable<AsyncCompletedEventArgs> WebMethod1()
{
_client.WebMethod1Async();
// ...
}
public IObservable<AsyncCompletedEventArgs> WebMethod2()
{
_client.WebMethod2Async();
// ...
}
// ...
}
注意:我使用的是 Silverlight,所以这就是为什么一切都是异步的。