WCF 未设置跟踪,将禁用跟踪。 异常: System.ArgumentException: 未找到请求的值“详细,ActivityTracing”。

WCF 设置诊断跟踪,可是追踪文件无法生成,打开事件日志 显示如下

未设置跟踪。将禁用跟踪。
 异常: System.ArgumentException: 未找到请求的值“详细,ActivityTracing”。
   在 System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
   在 System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   在 System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   在 System.Diagnostics.TraceSource.Initialize()
   在 System.Diagnostics.TraceSource.get_Listeners()
   在 System.Runtime.Diagnostics.DiagnosticTraceBase.UnsafeRemoveDefaultTraceListener(TraceSource traceSource)
   在 System.Runtime.Diagnostics.DiagnosticTraceBase.SetTraceSource(TraceSource traceSource)
   在 System.Runtime.Diagnostics.EtwDiagnosticTrace.CreateTraceSource()
   在 System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(String traceSourceName, Guid etwProviderId)
 进程名称: ConsoleApp3
 进程 ID: 1460

 

问题是ArgumentException  异常, “详细,ActivityTracing” 这个参数是不被识别的,App.cofig 文件我是通过工具生成的,参数应该是 “Verbose,ActivityTracing” 应该在配置文件App.config 相应配置进行改成英文,如下图:

原因:是WCF配置编辑工具帮我们生成的诊断配置包括中文,而中文却不被识别!

### 关于 `System.Net.Sockets.SocketException` 异常的原因 当遇到 `System.Net.Sockets.SocketException:“在其上下文中,该请求的地址无效。”` 的错误时,这通常是由于尝试绑定到一个不支持的操作系统环境下的特定 IP 地址或端口号引起的[^1]。例如,在某些操作系统配置下,可能不允许应用程序绑定到本地回环地址以外的其他 IPv4 或 IPv6 地址。 对于错误信息 `"通常每个套接字地址(协议/网络地址/端口)只允许使用一次"` 来说,则表明试图重复使用已经被占用的端口来创建新的监听器实例[^2]。这种情况下,要么是同一程序内的逻辑缺陷导致多次调用了相同的侦听操作而释放资源;要么是在不同进程中存在冲突的服务正在运行并占用了目标端口。 另外一种常见的场景是 WCF 数据传输过程中发生的异常——即远程主机强迫关闭现有连接的情况。这种情况可能是由多种因素造成的,比如服务器端主动终止了客户端发起的数据流处理过程,或是因为长时间无响应而导致超时断开等情形[^3]。 ### 解决方案概述 针对上述提到的不同类型的 Socket Exception 错误消息,可以采取如下措施: #### 对于 "在其上下文中,该请求的地址无效" - **确认IP版本兼容性**:确保使用的 IP 版本(IPv4 vs IPv6)与当前系统的设置相匹配。 - **验证端口可用性和权限**:检查是否有足够的权限去访问指定范围内的端口,并且这些端口确实处于可分配状态而不是被防火墙或其他安全策略封锁。 ```csharp // 验证端口是否已被占用的一种方式 bool IsPortAvailable(int port) { var ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpListeners(); foreach (IPEndPoint endpoint in tcpConnInfoArray) if (endpoint.Port == port) return false; return true; } ``` #### 处理 "通常每个套接字地址仅限单次使用" - **避免多处同时开启相同服务**:如果在同一台机器上部署多个应用副本,请务必保证它们不会共享同一个对外提供服务的端口。 - **合理管理生命周期**:确保每次完成通信之后都正确地关闭 socket 资源,防止残留对象阻止后续重试建立新连接的机会。 ```csharp using System.Net.Sockets; try { using(Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) { // 正确初始化和使用Socket... // 使用完毕后立即释放资源 } } catch (SocketException ex){ Console.WriteLine($"Error occurred while creating or closing the socket:{ex.Message}"); } ``` #### 应对 WCF 中的大数据量传输问题 为了缓解 WCF 服务在高负载条件下可能出现的连接中断现象,可以通过调整绑定配置中的时间参数以及增大缓冲区大小等方式优化性能表现[^4]。具体做法包括但不限于增加读写超时时长、提升最大接收消息尺寸限制等。 ```xml <bindings> <basicHttpBinding> <binding name="GEDemoServiceBinding" closeTimeout="00:05:00" openTimeout="00:05:00" sendTimeout="00:05:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" maxDepth="32"/> </binding> </basicHttpBinding> </bindings> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值