gpt4 book ai didi

c# - 从 app.config 获取 WCF 客户端端点 IP

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:37 25 4
gpt4 key购买 nike

我有一个使用 netTcpBinding 连接到 WCF 服务的客户端。

要连接到服务,我在我的客户端中使用以下内容:

namespace Embedded_DCC_Client
{
public class EmbeddedClient
{
private ChannelFactory<IEmbeddedService> channelFactory;

//Embedded DCC TCP Addresses
public const String LOCAL_ADDRESS = "net.tcp://localhost:9292/EmbeddedService";
public const String REMOTE_ADDRESS = "net.tcp://192.168.10.42:9292/EmbeddedService";

public IEmbeddedService Proxy { get; private set; }

public EmbeddedClient()
{
//Configure binding
NetTcpBinding binding = new NetTcpBinding();
binding.OpenTimeout = TimeSpan.MaxValue; //infinite open timeout
binding.CloseTimeout = TimeSpan.MaxValue; //infinite close timeout
binding.SendTimeout = TimeSpan.MaxValue; //infinite send timeout
binding.ReceiveTimeout = TimeSpan.MaxValue; //infinite recieve timeout
binding.Security.Mode = SecurityMode.None; //No security mode

//Setup the channel to the service...
//TODO debugging use a proper IP address here, and read it from a file. Allows devs to switch between simulator (localhost) and actual embedded DCC
channelFactory = new ChannelFactory<IEmbeddedService>(binding, new EndpointAddress(REMOTE_ADDRESS));

}

public void Open()
{
Proxy = channelFactory.CreateChannel();
}

public void Close()
{
channelFactory.Close();
}
}
}

为了调试,我经常在本地机器和远程机器上运行服务之间切换。有没有办法从客户端的 app.config 中获取 IP,这样我就不必在每次想更改 IP 时都重新编译?

客户端 app.config 是使用 MEX 生成的:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="TCPEndPoint" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" transactionFlow="false"
transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" listenBacklog="10"
maxBufferPoolSize="524288" maxBufferSize="65536" maxConnections="10"
maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
<message clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
</bindings>
<client>
<endpoint name="TCPEndPoint"
address="net.tcp://localhost:9292/EmbeddedService"
binding="netTcpBinding"
bindingConfiguration="TCPEndPoint"
contract="ServiceReference1.IEmbeddedService" />
</client>
</system.serviceModel>
</configuration>

理想情况下,我会在这里更改 IP。如何从这里获取端点地址?

最佳答案

基本上,您可以做的是创建两个客户端端点 - 一个用于您要连接的每个 IP,然后在您的代码中选择您想要的一个。

您客户的 app.config看起来像这样:

 <client>
<endpoint name="tcpLocal"
address="net.tcp://localhost:9292/EmbeddedService"
binding="netTcpBinding"
bindingConfiguration="TCPEndPoint"
contract="ServiceReference1.IEmbeddedService" />
<endpoint name="tcpRemote"
address="net.tcp://192.168.10.42:9292/EmbeddedService"
binding="netTcpBinding"
bindingConfiguration="TCPEndPoint"
contract="ServiceReference1.IEmbeddedService" />
</client>

然后在您的代码中,根据某些标准,您将不得不使用 tcpLocaltcpRemote客户端端点定义:

// connect to the local address
channelFactoryLocal = new ChannelFactory<IEmbeddedService>("tcpLocal");

// or connect to the remote address
channelFactoryRemote = new ChannelFactory<IEmbeddedService>("tcpRemote");

末尾的字符串表示 name=对于 <client>/<endpoint>在每种情况下使用的定义。您可以选择本地或远程连接 - 或者,如果您愿意,甚至可以同时使用这两种连接! :-)

关于c# - 从 app.config 获取 WCF 客户端端点 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7691230/

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