我有一个 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!)。通过一些工作,我可以重组真正的代码以这种方式工作,但我仍然非常感谢您的解释。学习很重要。