使用WSDL生成类构建SOAP请求未附加认证头,调用服务无响应
排查C#调用SOAP服务无输出问题(未关联认证头)
核心问题就是你没把认证头实例绑定到DataDownloadService代理类上,服务端因为缺少必填的认证信息,大概率直接拒绝了请求,而你的代码没处理异常,导致程序静默卡住或终止,没有后续输出。
解决步骤:
绑定认证头到服务实例
通过WSDL生成代理类时,会自动生成对应CMBHSAuthenticationHeader的属性,你需要把创建好的认证头实例赋值给服务类的这个属性,代码示例:// 实例化SOAP服务代理类 var dataService = new DataDownloadService(); // 创建并配置认证头 var authHeader = new CMBHSAuthenticationHeader(); authHeader.Username = "你的用户名"; authHeader.Password = "你的密码"; // 关键操作:将认证头绑定到服务实例 dataService.CMBHSAuthenticationHeaderValue = authHeader;添加异常捕获定位问题
无输出很大概率是未捕获的异常导致的,给调用代码加上完整的异常捕获,就能看到具体错误:try { // 调用Download方法,传入你的业务参数 var downloadResult = dataService.Download(/* 此处传入方法所需参数 */); // 输出结果日志 Console.WriteLine($"请求成功,结果:{downloadResult}"); } catch (System.Net.WebException ex) { // 捕获网络类异常,可查看服务端返回的错误响应 using (var responseStream = ex.Response?.GetResponseStream()) using (var reader = new System.IO.StreamReader(responseStream)) { Console.WriteLine($"网络错误详情:{reader.ReadToEnd()}"); } } catch (System.Web.Services.Protocols.SoapException ex) { // 捕获SOAP服务返回的业务级错误 Console.WriteLine($"SOAP服务错误:{ex.Message},错误代码:{ex.Code}"); } catch (System.Exception ex) { // 捕获其他所有未知异常 Console.WriteLine($"未知错误:{ex.ToString()}"); }验证请求格式(可选)
如果绑定认证头后仍有问题,可以开启SOAP请求日志,对比你已有的正常请求,确认发送的内容是否一致。在项目的app.config或web.config中添加以下配置:<system.diagnostics> <sources> <source name="System.Net" tracemode="includehex" maxdatasize="2048"> <listeners> <add name="NetTrace"/> </listeners> </source> </sources> <sharedListeners> <add name="NetTrace" type="System.Diagnostics.TextWriterTraceListener" initializeData="soap_request.log"/> </sharedListeners> <switches> <add name="System.Net" value="Verbose"/> </switches> </system.diagnostics>运行程序后,查看生成的
soap_request.log,检查请求中是否包含了正确的CMBHSAuthenticationHeader内容。
内容的提问来源于stack exchange,提问作者bob alston
相关产品推荐
相关产品推荐

