在生成的服务参考中公开请求方法
Exposing request method in generated Service Reference
在生成的服务参考(从 WSDL 导入)中,我在客户端 class 中有以下方法,在 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);
}
我见过 Python 使用相同 WSDL 的代码,它能够像 response = client.newService(request)
那样访问方法。
我也想以那种方式访问该方法,尽管 var task = client.newService(request); Task.WaitAll(task); var response = task.Result;
,但我似乎无法找到创建服务引用的正确组合,而不必被迫扩展输入参数到服务。
是否有创建服务引用的神奇组合,允许我将请求作为单个对象传递?
我对保留异步功能并不着急。
服务的客户端实现代表该服务的接口。它恰好发生了,并在此示例中显示,它不一定使所有那些已实现的方法 public.
因此,为了解决这个问题,如果我将客户端对象转换为服务接口,我就可以按预期调用服务,而不管客户端做了什么public。
var client = new ServiceClient();
var service = (Service)client;
var request = new newServiceRequest() { ... };
var response = service.newService(request);
client.Close();
在生成的服务参考(从 WSDL 导入)中,我在客户端 class 中有以下方法,在 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);
}
我见过 Python 使用相同 WSDL 的代码,它能够像 response = client.newService(request)
那样访问方法。
我也想以那种方式访问该方法,尽管 var task = client.newService(request); Task.WaitAll(task); var response = task.Result;
,但我似乎无法找到创建服务引用的正确组合,而不必被迫扩展输入参数到服务。
是否有创建服务引用的神奇组合,允许我将请求作为单个对象传递?
我对保留异步功能并不着急。
服务的客户端实现代表该服务的接口。它恰好发生了,并在此示例中显示,它不一定使所有那些已实现的方法 public.
因此,为了解决这个问题,如果我将客户端对象转换为服务接口,我就可以按预期调用服务,而不管客户端做了什么public。
var client = new ServiceClient();
var service = (Service)client;
var request = new newServiceRequest() { ... };
var response = service.newService(request);
client.Close();