gpt4 book ai didi

wcf - 如何以编程方式获取客户端代理正在使用的绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 14:09:07 25 4
gpt4 key购买 nike

我有一个在运行时使用 DuplexChannelFactory 生成的 WCF 代理。

仅给定从 DuplexChannelFactory 返回的服务接口(interface),如何访问绑定(bind)信息?

我可以通过转换到 IClientChannel 来获得大多数东西,但我似乎无法在那里找到绑定(bind)信息。我能得到的最接近的是 IClientChannel.RemoteAddress ,它是一个端点,但它似乎也没有绑定(bind)信息。 :-/

最佳答案

你不能(直接)。您可以从 channel 中获得一些信息,例如消息版本 (channel.GetProperty<MessageVersion>()) 和其他值。但绑定(bind)不是其中之一。 channel 是在绑定(bind)被“解构”后创建的(即,扩展成它的绑定(bind)元素,而每个绑定(bind)元素都可以向 channel 堆栈添加一个片段。

但是,如果您想在代理 channel 中拥有绑定(bind)信息,您可以使用上下文 channel 的扩展属性之一自己添加它。下面的代码显示了一个例子。

public class StackOverflow_6332575
{
[ServiceContract]
public interface ITest
{
[OperationContract]
int Add(int x, int y);
}
public class Service : ITest
{
public int Add(int x, int y)
{
return x + y;
}
}
static Binding GetBinding()
{
BasicHttpBinding result = new BasicHttpBinding();
return result;
}
class MyExtension : IExtension<IContextChannel>
{
public void Attach(IContextChannel owner)
{
}

public void Detach(IContextChannel owner)
{
}

public Binding Binding { get; set; }
}
static void CallProxy(ITest proxy)
{
Console.WriteLine(proxy.Add(3, 5));
MyExtension extension = ((IClientChannel)proxy).Extensions.Find<MyExtension>();
if (extension != null)
{
Console.WriteLine("Binding: {0}", extension.Binding);
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(ITest), GetBinding(), "");
host.Open();
Console.WriteLine("Host opened");

ChannelFactory<ITest> factory = new ChannelFactory<ITest>(GetBinding(), new EndpointAddress(baseAddress));
ITest proxy = factory.CreateChannel();

((IClientChannel)proxy).Extensions.Add(new MyExtension { Binding = factory.Endpoint.Binding });

CallProxy(proxy);

((IClientChannel)proxy).Close();
factory.Close();

Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}

关于wcf - 如何以编程方式获取客户端代理正在使用的绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332575/

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