c# - WCF Discovery : System. UriFormatException 使用带通配符 (*) 的 URI 创建 ServiceHost

标签 c# wcf uri wildcard discovery

我的目的是:

运行自托管 WCF 服务,其基址在运行时根据可用网卡设置;客户端发现服务并获取地址。

以前的回答:

我找到了相同的目的和建议的解决方案 here

我的问题:

当我运行托管控制台应用程序时,此处抛出异常:

var host = new ServiceHost(typeof(WcfPingTest), new Uri("http://*:7400/WcfPing"));

异常详细信息:System.UriFormatException:无效的 URI:无法解析主机名

如果我用 localhost 替换 *,它可以工作,但它不能满足我的任务,即:从客户端获取真实的 ip 地址,而不是硬编码的。

我也尝试过在 app.config 文件中执行此操作,但异常是相同的:

我哪里出错了?

附加信息:C# 代码、.NET Framework 4.5


更新: 在 app.config 文件中使用通配符:

<baseAddresses><add baseAddress="http://*:7400/WcfPing" /></baseAddresses>

在控制台应用程序中:

var host = new ServiceHost(typeof(WcfPingTest))

另一方面,Uri 构造函数不接受内部带有 * 字符的 uriString 参数


下一个主题:使用上面的源代码,我的客户在运行时获取 uri,但此 uri 包含 MY_COMPUTER_NAME,如 http://MY_COMPUTER_NAME:7400/WcfPing , 而不是

http://MY_IP_ADDRESS:7400/WcfPing

有什么方法可以得到实际的IP地址吗? (我有多个用于不同本地网络的 NIC)

最佳答案

出现异常是因为 uriString 对 Uri 无效。 关于配置文件中的通配符,请检查你的配置文件是否类似

<system.serviceModel>
    <services>
        <service name="Nelibur.ServiceModel.Services.JsonServicePerCall">
            <host>
                <baseAddresses>
                    <add baseAddress="http://*:9095/feedback" />
                </baseAddresses>
            </host>
            <endpoint binding="webHttpBinding"
                      contract="Nelibur.ServiceModel.Contracts.IJsonService" />
        </service>
    </services>
</system.serviceModel>

并且new ServiceHost不包含new Uri,也许你只是忘了它

var host = new ServiceHost(typeof(WcfPingTest)

关于c# - WCF Discovery : System. UriFormatException 使用带通配符 (*) 的 URI 创建 ServiceHost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22817398/

相关文章:

c# - C# 在控制台上打印 ASCII 字符

c# - Rhino Mocks,每次执行 stub 方法时返回不同的结果

WCF - 为什么要为服务创建多个端点?

javascript - Angular JS 脚本应用程序始终使用 Wcf 服务返回 True

c# - Entity Framework Core Linq 查询以过滤相关实体

c# - MediaCapture.StartPreviewToCustomSinkAsync 方法如何工作?

c# - 如何在带有配置文件的 Powershell 脚本中使用自定义 WCF 代理?

android - 如何使用 "Share image using"共享 Intent 在 android 中共享图像?

java - 设置用户凭据时 Youtube Java API 出错

http - 带有 a/in 的查询字符串有效吗?