interface IComWrapper
{
    object GetComObject();
    //something else? 
}
abstract class ComWrapperBase<T> : IComWrapper
{
    public virtual object GetComObject()
    {
        return BaseObject;
    }
    protected ComWrapperBase(T baseObject)
    {
        BaseObject = baseObject;
    }
    protected T BaseObject { get; private set; }
}
class Request1 : ComWrapperBase<CCOMReq>
{
    public Request1(CCOMReq baseObject) : base(baseObject)
    {}
    public DateTime DateTime
    {
        get { return BaseObject.Date_Time;  }
        set { BaseObject.Date_Time = value; }
    }
    public override string ToString()
    {
        return "Something you might want to log?";
    }
    //mapping
}
class Response1 : ComWrapperBase<ICOMRsp>
{
    public Response1(ICOMRsp baseObject) : base(baseObject)
    {}
    //mapping
}
interface IComService
{
    object Send(object comRequest);
}
interface ILogging
{
    void Log(object sender, string message);
}
interface IWrappersFactory
{
    T CreateWrapper<T>(object comObject);
}
class WebServiceInterface
{
    private readonly IComService _service;
    private readonly ILogging _log;
    private readonly IWrappersFactory _factory;
    public WebServiceInterface(IComService service, ILogging log, IWrappersFactory factory)
    {
        _service = service;
        _log = log;
        _factory = factory;
    }
    public TResponse Send<TRequest, TResponse>(TRequest request) 
        where TRequest : IComWrapper 
        where TResponse : IComWrapper
    {
        _log.Log(GetType(), request.ToString());
        var res = _service.Send(request.GetComObject());
        return _factory.CreateWrapper<TResponse>(res);
    }
}
//an example of how ComService implementation might look like (there is probably a better way)
class ComService : IComService
{
    private readonly ServiceClient WEBSVC = new ServiceClient();
    //depending on ServiceClient implementation, this probably can be simplified
    public object Send(object comRequest)
    {
        var r1 = comRequest as CCOMReq;
        if (r1 != null)
        {
            return WEBSVC.Method1(r1);
        }
        //handle other messages
        //.....
        //.....
        throw new NotSupportedException();
    }
}