WCF服务部署IIS后浏览器访问出现NullReferenceException问题求助
从你的异常堆栈和配置来看,核心问题是你开启了SOAP风格的元数据发布(serviceMetadata httpGetEnabled="true"),但你的服务是基于webHttpBinding的REST服务,WsdlExporter无法为REST端点生成WSDL,从而触发空引用异常。
为什么会出现这个异常?
WsdlExporter组件是专门为SOAP服务生成WSDL元数据的,而REST风格的WCF服务(使用webHttpBinding+webHttp行为)并不遵循SOAP规范,没有对应的WSDL结构。当你在浏览器访问服务基地址时,会触发元数据获取请求,此时WsdlExporter尝试处理REST端点,找不到必要的SOAP绑定信息,就会抛出System.NullReferenceException。
解决方案
1. 关闭SOAP元数据发布
修改你的serviceBehaviors中的serviceMetadata配置,禁用HTTP和HTTPS的元数据获取:
<serviceBehaviors> <behavior name="Service1Behavior"> <!-- 关闭元数据发布,因为REST服务不需要WSDL --> <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> <serviceDebug httpHelpPageEnabled="false" includeExceptionDetailInFaults="true" /> <serviceThrottling maxConcurrentCalls="200" maxConcurrentSessions="500" maxConcurrentInstances="600" /> </behavior> <!-- 其他行为配置同理修改 --> </serviceBehaviors>
2. 正确测试REST接口
REST服务不能通过浏览器访问基地址来测试(会触发元数据请求),你需要直接调用接口的UriTemplate地址:
- 比如测试
Mthod1,可以用Postman、curl等工具发送POST请求到:https://你的域名/json/Mthod1(对应address="json"的endpoint)
请求体格式要符合JSON要求:{"Query": "你的查询内容"}
3. 检查HTTPS绑定配置
确认你的IIS站点已经正确配置了SSL证书,HTTPS绑定端口(默认443)正常,并且webHttpsBinding的security mode="Transport"配置和IIS的HTTPS设置一致。
额外建议
如果是新开发的Web服务,更推荐使用ASP.NET Web API(或ASP.NET Core Web API),它对REST的支持更完善、更现代,避免WCF REST的诸多局限性。如果坚持使用WCF REST,记得不要开启SOAP元数据发布。
内容的提问来源于stack exchange,提问作者AGV

