gpt4 book ai didi

c# - 在运行时更改服务引用端点,有时会使用错误的端点

转载 作者:太空狗 更新时间:2023-10-29 22:01:06 26 4
gpt4 key购买 nike

我有一个 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 的请求时,这有时不起作用。第二个请求最终会发送到与第一个请求相同的端点。我知道一旦 channel 打开我就不能改变端点,但我认为客户端只会被使用一次然后被处理掉。在为多个请求重新使用同一个代理的情况下是否进行了一些优化?解决此类问题的好方法是什么?

编辑:更多细节:

该片段是向我的 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!";
}
}

我还没有为并发控制设置任何明确的内容。我了解其背后的理论,但缺乏技术经验,因此非常感谢任何手 Handlebars 的帮助。

另外!更改端点地址而不是在代理构造函数中指定它有一个半有效的理由。但是,出于测试目的,我只是尝试在构造函数中进行指定,它似乎运行良好(感谢 JMeter!)。通过一些工作,我可以重构真正的代码以那样工作,但我仍然非常感谢您的解释。学习很重要。

最佳答案

如果您查看 ClientBase`1 源代码,您会注意到 Endpoint 实际上是从底层 ChannelFactory 中检索的:

public ServiceEndpoint Endpoint
{
get
{
TryDisableSharing();
return GetChannelFactory().Endpoint;
}
}

默认情况下,ClientBase`1 的 CacheSetting 使用 CacheSetting.Default,这意味着它会尝试缓存 channel 工厂,因此有时您似乎碰巧从 2 个不同的客户端修改了缓存工厂的端点

关于c# - 在运行时更改服务引用端点,有时会使用错误的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18900230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com