C#使用WSDL生成SOAP接口无法修改默认请求URL问题咨询
问题解答
1. 关于WSDL文件是否有问题
该问题基本不是WSDL无效或文件不一致导致的,除非你逐行对比两份WSDL确实存在结构差异,否则代码结构差异和WSDL本身无关。
2. 关于代码生成工具差异
这是导致代码结构不同的核心原因:
- 参考项目的代理代码是使用旧版ASMX Web引用生成工具(底层调用
wsdl.exe)生成的,默认生成的服务类会继承SoapHttpClientProtocol,暴露可读写的Url属性供动态修改。 - 你当前生成代码用的是WCF连接服务引用工具(底层调用
svcutil.exe或dotnet-svcutil),默认生成「服务接口+客户端实现类」的分离结构,所以你会先看到接口定义,实际的客户端实现类在代码下方,默认绑定的endpoint地址确实是只读属性。
3. 关于是否需要手动修改Reference.cs
不需要手动修改自动生成的Reference.cs文件,这类文件每次更新服务引用都会被覆盖,修改不会长期生效。参考项目的代码也不是手动修改的结果,只是选择了不同的生成工具。
4. 关于排查方向和解决方案
你的排查方向没有偏差,有两种可选方案解决地址修改问题:
- 方案一:改用旧版Web引用生成代码,步骤为:右键项目 → 添加 → 服务引用 → 点击底部「高级」按钮 → 点击底部「添加Web引用」 → 输入WSDL地址生成,生成的代码结构和参考项目完全一致,可直接修改
Url属性。 - 方案二:直接使用当前生成的WCF客户端,构造实例时传入自定义地址即可,无需修改生成代码,示例代码如下:
// 替换为你实际的服务客户端类名、端点配置名、目标请求地址 var client = new SageX3ServiceClient(SageX3ServiceClient.EndpointConfiguration.DefaultEndpoint, new System.ServiceModel.EndpointAddress("http://你的自定义SageX3接口地址"));
内容的提问来源于stack exchange,提问作者LudwigW
相关产品推荐
相关产品推荐

