Ego*_*gor 6 c# wcf web-services
我有一个WCF服务,该服务又具有对其他SOAP端点的服务引用.此端点在另一个地址具有相同的副本,具有相同的元数据但数据不同.当请求进入我的服务时,它指定我使用它的两个相同端点中的哪一个想要数据.所以,我有这样的事情:
using (var client = new ServiceClient())
{
client.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
//do some work, pull some data, bake some muffins
}
Run Code Online (Sandbox Code Playgroud)
当我有两个请求与不同的URL非常接近时,这有时不起作用.第二个请求最终会转到与第一个请求相同的端点.我知道一旦频道打开我就无法改变端点,但我认为客户端只会被使用一次然后处理掉.是否有一些优化在同一个代理被重用于多个请求的地方?对这样的问题有什么好处?
编辑:更多细节:
该片段是一个方法的一部分(让我们称之为foo()),它暴露给我的RESTful服务的消费者.它不是静态的.端点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!";
}
}
Run Code Online (Sandbox Code Playgroud)
我没有为并发控制设置任何明确的内容.我理解它背后的理论,但缺乏技术经验,所以任何手握都会非常感激.
也!有一个半有效的理由来更改端点地址,而不是在代理构造函数中指定它.但是,出于测试目的,我只是尝试在构造函数中指定并且它看起来工作正常(感谢JMeter!).通过一些工作,我可以重构真正的代码以便这样工作,但我仍然非常感谢解释.学习很重要.
如果您查看 ClientBase`1 源代码,您会注意到 Endpoint 实际上是从底层 ChannelFactory 检索的:
public ServiceEndpoint Endpoint
{
get
{
TryDisableSharing();
return GetChannelFactory().Endpoint;
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,ClientBase`1 的 CacheSetting 使用 CacheSetting.Default,这意味着它会尝试缓存通道工厂,因此有时您似乎碰巧从 2 个不同的客户端修改了缓存工厂的端点
| 归档时间: |
|
| 查看次数: |
2257 次 |
| 最近记录: |