我有一个WCF服务,它又引用了另一个SOAP终结点的服务引用。该终结点在另一个地址上具有相同的元数据但不同的数据。当请求到达我的服务时,它指定了我要从这两个相同的终结点中哪一个获取数据。所以,我有如下代码:
using (var client = new ServiceClient())
{
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
//do some work, pull some data, bake some muffins
}
有时当我有两个请求非常接近且具有不同的url时,这种方法不起作用。第二个请求最终与第一个请求相同的端点连接。我知道一旦通道打开就无法更改端点,但我认为客户端只会被使用一次,然后被处理。是否存在某些优化,使得同一代理用于多个请求?解决此类问题的好方法是什么?
编辑:更多详细信息: 这个片段是一个暴露给我的RESTful服务的消费者的方法(我们称之为foo())。它不是静态的。端点url是作为URI的一部分提供的本地字符串。
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "getStuff?url={url}")]
string foo(string url);
public string foo(string url)
{
using (var client = new ServiceClient())
{
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
//do some work, pull some data, bake some muffins
return "SO rocks!";
}
}
我还没有为并发控制设置任何明确的内容。我理解它背后的理论,但缺乏技术经验,因此如果需要帮助,请手把手地指导我。
另外!更改终端地址而不是在代理构造函数中指定它有一个半合理的原因。然而,出于测试目的,我尝试在构造函数中指定它,似乎完美地运行了(感谢JMeter!)。稍微修改一下真实代码,我也可以按这种方式运行,但仍然非常感谢您的解释。学习很重要。