在iis下发布wcf,调用时出现错误--调用方未由服务进行身份验证

时间:2022-11-03 20:12:16
     在服务器的iis上发布了wcf,调用的时候报错“调用方未由服务进行身份验证”。本来想着是很常见的错误,改配置文件的<security mode="Message">为<security mode="None">就行了。结果改了之后出现了许多别的错误,按照网上找到的方法,每一个能解决问题的。

    发现在本机的iis上发布,调用的时候是<security mode="Message">,但是却不会报错,因此想着不会是直接改成none这么简单。但是为什么呢,本机iis可以,令找一台环境相同的机器就不行了。

    改成None后出现的问题:

服务 http://webapp2/test/wcf.Service1.svc 不支持内容类型 multipart/related; type="application/xop+xml";start="<http://tempuri.org/0>";boundary="uuid:15088790-3273-4ce3-8d5b-9fba4667adbc+id=1";start-info="application/soap+xml"。客户端和服务绑定可能不匹配。

    无论怎么试都找不到问题的解决方法,因为在本机发布时不会出现“调用方未由服务进行身份验证”,所以还以为是环境的问题,于是放弃了修改web.config的方法。差点走到了一条不归路,折腾wcf证书等等的东西。后来听一个朋友说,在wcf服务端web.config中的endpoint节点中加入bindingConfiguration="WSHttpBinding_IZiDianService1",试了一下,居然可以了。虽然并不知道为什么要这么做,可能是客户端有这个配置,而服务端默认的是没有,所以提示绑定不匹配,改了之后就匹配了吧。

    另外,客户端和服务端的配置要完全一致,都要由Message改为None,messageEncoding都为Text或者都为Mtom。首次测试程序应该设置为<security mode="None">,安全性是后期考虑的问题,<security mode="Message">的情况,还必须设置子项,默认是微软内置的安全性验证,千万别用,问题非常多,只适用于本机。如果你一定要启用安全设置,应该用证书。这些都是权宜之计,还是要深入理解wcf的工作原理才对。