WCF 服务的客户端方法说明
Client's method description for WCF service
我有一个 WCF 服务(在 windows-service 中托管)和一个客户端。
它们的交互方式如下:客户端发送请求,服务获取请求,然后 returns HTTP 200。客户端还将其地址传递给 WS-Addressing header 中的答案。目前仅此而已
几个小时后 windows-service 应该会发送该请求的结果。客户端有一个 web-method 将得到结果。所以问题是:对于将获得结果的客户端方法,应该在哪里进行描述(方法名称,其参数)?客户端应该公开其 WSDL,还是我应该将该描述放入我的 WSDL(如果它以这种方式工作)?
据我了解,您有两个服务,我们称它们为服务 A(托管在 Windows 服务中)和服务 B。服务 B 向服务 A 发送请求(换句话说,它是像客户端一样)让服务 A 启动某种长期 运行 任务。
任务完成后,服务 A 需要将结果发送给服务 B。由于它是一个长 运行 任务,使用双工绑定 不会是理想的。但是,服务 A 可以调用服务 B 公开的方法来发送结果。
像这样:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
public void StartWork();
}
[ServiceContract]
public interface IServiceB
{
[OperationContract]
public void ReceiveResults(ResultData data);
}
其中 ResultData
是包含结果的某个对象(也可以是简单类型,这只是为了说明)。 ServiceA 的 StartWork
可以 return 无效(响应仍将发送到客户端,因为它没有标记为 IsOneWay=true
)。半伪代码如下:
开始任务:
ServiceAClient client = new ServiceAClient();
client.Open();
client.StartWork();
client.Close();
服务A在任务完成后将结果发送给服务B:
ResultData results = new ResultData();
ServiceBClient client = new ServiceBClient();
client.Open();
client.ReceiveResults(results);
client.Close();
在这种情况下,接收结果的方法将是服务 B 的 WSDL 的一部分,因为服务 A 将调用该方法。
我有一个 WCF 服务(在 windows-service 中托管)和一个客户端。
它们的交互方式如下:客户端发送请求,服务获取请求,然后 returns HTTP 200。客户端还将其地址传递给 WS-Addressing header 中的答案。目前仅此而已
几个小时后 windows-service 应该会发送该请求的结果。客户端有一个 web-method 将得到结果。所以问题是:对于将获得结果的客户端方法,应该在哪里进行描述(方法名称,其参数)?客户端应该公开其 WSDL,还是我应该将该描述放入我的 WSDL(如果它以这种方式工作)?
据我了解,您有两个服务,我们称它们为服务 A(托管在 Windows 服务中)和服务 B。服务 B 向服务 A 发送请求(换句话说,它是像客户端一样)让服务 A 启动某种长期 运行 任务。
任务完成后,服务 A 需要将结果发送给服务 B。由于它是一个长 运行 任务,使用双工绑定 不会是理想的。但是,服务 A 可以调用服务 B 公开的方法来发送结果。
像这样:
[ServiceContract]
public interface IServiceA
{
[OperationContract]
public void StartWork();
}
[ServiceContract]
public interface IServiceB
{
[OperationContract]
public void ReceiveResults(ResultData data);
}
其中 ResultData
是包含结果的某个对象(也可以是简单类型,这只是为了说明)。 ServiceA 的 StartWork
可以 return 无效(响应仍将发送到客户端,因为它没有标记为 IsOneWay=true
)。半伪代码如下:
开始任务:
ServiceAClient client = new ServiceAClient();
client.Open();
client.StartWork();
client.Close();
服务A在任务完成后将结果发送给服务B:
ResultData results = new ResultData();
ServiceBClient client = new ServiceBClient();
client.Open();
client.ReceiveResults(results);
client.Close();
在这种情况下,接收结果的方法将是服务 B 的 WSDL 的一部分,因为服务 A 将调用该方法。