在生成的服务引用(从WSDL导入)中,我在Client.c中的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;
,但我似乎无法找到创建服务引用的正确组合,而不必强制将输入参数扩展到服务。
创建服务参考是否有一个神奇的组合允许我将请求作为单个对象传递?
我不喜欢保持异步功能。
答案 0 :(得分:0)
服务的客户端实现代表服务的接口。它就是这样,并且在这个例子中显示,它并不一定公开所有那些实现的方法。
因此,为了解决这个问题,如果我将客户端对象转换为服务接口,我可以按预期调用服务,无论客户端公开了什么。
var client = new ServiceClient();
var service = (Service)client;
var request = new newServiceRequest() { ... };
var response = service.newService(request);
client.Close();