为选定的Web方法生成代理类

时间:2012-12-13 08:49:51

标签: c# asp.net soap wsdl

我有一个真正的大(暴露近200个webmethods)asp.net Web服务。我正在开发第二个应用程序,该服务消耗很少的webmethods(2 webmethods)。当我使用visual studio生成第一个Web服务的代理类时,它会为所有Web方法生成它。是否有任何方法可以为选定的Web方法生成代理类,以及仅在这些Web方法中使用的自定义类型。

2 个答案:

答案 0 :(得分:0)

我不相信这是可能的。但是,对此的经典解决方法是使用外观模式,仅向您的应用程序公开感兴趣的方法,并直接委派给真正的Web服务方法。

例如:

public interface IWebServiceWrapper
{
    void DoStuffWith(Something something);

    SomethingElse GetSomeThingElse(int id);

}


public class ServiceWrapper : IWebServiceWrapper
{
    private TheRealWebService _realWebService = new TheRealWebService();

    public void DoStuffWith(Something something)
    {
        _realWebService.DoStuffWith(something);
    }

    public SomethingElse GetSomeThingElse(int id)
    {
        _realWebService.GetSomeThingElse(id);
    }

}

答案 1 :(得分:0)

一种方法是手动完成。

它仍然很容易维护,但当然比使用自动生成更多的手动操作。处理也可以很好地添加。

public class ServiceProxy : ClientBase<IService>, IService>, IDisposable
{
  public Response DoAction(Request request)
  {
    return Channel.DoAction(request);
  }

  private bool disposed;

  protected virtual void Dispose(bool disposing)
  {
    if (!this.disposed)
    {
        if (disposing)
        {
            if (base.State == CommunicationState.Faulted)
            {
                this.Abort();
            }
            else if (base.State != CommunicationState.Closed)
            {
                try
                {
                    this.Close();
                }
                catch (Exception exc)
                {
                    this.Abort();
                }
            } 
            disposed = true;
        }
    }       
}