在生成的服务参考中公开请求方法

鲁本

在生成的服务引用(从WSDL导入)中,在Client类的Reference.cs中具有以下方法:

    public Namespace.Service.SalesOrderDetail newService(Namespace.Service.Contact orderContact, Namespace.Service.Contact installationContact, string customerReference, Namespace.Service.ServiceDetails[] serviceDetailsList) {
        Namespace.Service.newServiceRequest inValue = new Namespace.Service.newServiceRequest();
        inValue.orderContact = orderContact;
        inValue.installationContact = installationContact;
        inValue.customerReference = customerReference;
        inValue.serviceDetailsList = serviceDetailsList;
        Namespace.Service.newServiceResponse retVal = ((Namespace.Service.ServiceRequestPortType)(this)).newService(inValue);
        return retVal.salesOrder;
    }

    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
    System.Threading.Tasks.Task<Namespace.Service.newServiceResponse> Namespace.Service.ServiceRequestPortType.newServiceAsync(Namespace.Service.newServiceRequest request) {
        return base.Channel.newServiceAsync(request);
    }

    public System.Threading.Tasks.Task<Namespace.Service.newServiceResponse> newServiceAsync(Namespace.Service.Contact orderContact, Namespace.Service.Contact installationContact, string customerReference, Namespace.Service.ServiceDetails[] serviceDetailsList) {
        Namespace.Service.newServiceRequest inValue = new Namespace.Service.newServiceRequest();
        inValue.orderContact = orderContact;
        inValue.installationContact = installationContact;
        inValue.customerReference = customerReference;
        inValue.serviceDetailsList = serviceDetailsList;
        return ((Namespace.Service.ServiceRequestPortType)(this)).newServiceAsync(inValue);
    }

我已经看到了使用相同WSDL的Python代码,并且能够访问的方法response = client.newService(request)

我也想以这种方式访问​​该方法var task = client.newService(request); Task.WaitAll(task); var response = task.Result;,但是我似乎没有找到创建服务引用的正确组合,而没有被迫为服务扩展输入参数。

是否有一个神奇的服务引用创建组合,使我可以将请求作为单个对象传递?

我对保留异步功能并不感到困惑。

鲁本

服务的客户端实现了代表服务的接口。恰好发生在此示例中,并且不一定将所有实现的方法都公开。

因此,要解决此问题,如果我将客户端对象转换为服务接口,则无论客户端公开了什么内容,都可以按预期的方式调用服务。

var client = new ServiceClient();

var service = (Service)client;

var request = new newServiceRequest() { ... };

var response = service.newService(request);

client.Close();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章