WCF在iis发布后调用报错--调用方未由服务进行身份验证

时间:2022-11-03 20:11:52
    在服务器的iis上发布了wcf,调用的时候报错“调用方未由服务进行身份验证”。本来想着是很常见的错误,改配置文件的<security mode="Message">为<security mode="None">就行了。结果改了之后出现了许多别的错误,按照网上找到的方法,每一个能解决问题的。
    发现在本机的iis上发布,调用的时候是<security mode="Message">,但是却不会报错,因此想着不会是直接改成none这么简单。但是为什么呢,本机iis可以,令找一台环境相同的机器就不行了。各位帮帮忙吧。

8 个解决方案

#1


跨机器调用wcf,不需要啥特殊的设置吧?怎么没人回答呢?

#2


如果是 <security mode="None"> 得是 BasicHttpBinding。

#3


很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
client.ClientCredentials.Windows.ClientCredential.UserName = "";
            client.ClientCredentials.Windows.ClientCredential.Password = "";

#4


“结果改了之后出现了许多别的错误”,那又是什么错误?
首次测试程序应该设置为<security mode="None">,安全性是后期考虑的问题,<security mode="Message">的情况,还必须设置子项,默认是微软内置的安全性验证,千万别用,问题非常多,只适用于本机。如果你一定要启用安全设置,应该用证书。

#5


引用 4 楼 qldsrx 的回复:
“结果改了之后出现了许多别的错误”,那又是什么错误?
首次测试程序应该设置为<security mode="None">,安全性是后期考虑的问题,<security mode="Message">的情况,还必须设置子项,默认是微软内置的安全性验证,千万别用,问题非常多,只适用于本机。如果你一定要启用安全设置,应该用证书。

谢谢你的回答
改成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"。客户端和服务绑定可能不匹配。
问题已经解决了,在wcf服务端web.config中的endpoint节点中加入bindingConfiguration="WSHttpBinding_IZiDianService1"
虽然我不知道为什么这样是可以的。

#6


引用 3 楼 C_htp 的回复:
很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
C# code?12client.ClientCredentials.Windows.ClientCredential.UserName = "";            client.ClientCredentials.Windows……

还不知道怎么设置用户名和密码,学习一下。

#7


引用 2 楼 fangxinggood 的回复:
如果是 <security mode="None"> 得是 BasicHttpBinding。

貌似改了之后,还要在wcf服务端web.config中的endpoint节点中加入bindingConfiguration="WSHttpBinding_IZiDianService1"

#8


引用 3 楼 C_htp 的回复:
很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
client.ClientCredentials.Windows.ClientCredential.UserName = "";
            client.ClientCredentials.Windows.ClientCredential.Password = "";
感觉这个最靠谱,有验证才是王道

#1


跨机器调用wcf,不需要啥特殊的设置吧?怎么没人回答呢?

#2


如果是 <security mode="None"> 得是 BasicHttpBinding。

#3


很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
client.ClientCredentials.Windows.ClientCredential.UserName = "";
            client.ClientCredentials.Windows.ClientCredential.Password = "";

#4


“结果改了之后出现了许多别的错误”,那又是什么错误?
首次测试程序应该设置为<security mode="None">,安全性是后期考虑的问题,<security mode="Message">的情况,还必须设置子项,默认是微软内置的安全性验证,千万别用,问题非常多,只适用于本机。如果你一定要启用安全设置,应该用证书。

#5


引用 4 楼 qldsrx 的回复:
“结果改了之后出现了许多别的错误”,那又是什么错误?
首次测试程序应该设置为<security mode="None">,安全性是后期考虑的问题,<security mode="Message">的情况,还必须设置子项,默认是微软内置的安全性验证,千万别用,问题非常多,只适用于本机。如果你一定要启用安全设置,应该用证书。

谢谢你的回答
改成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"。客户端和服务绑定可能不匹配。
问题已经解决了,在wcf服务端web.config中的endpoint节点中加入bindingConfiguration="WSHttpBinding_IZiDianService1"
虽然我不知道为什么这样是可以的。

#6


引用 3 楼 C_htp 的回复:
很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
C# code?12client.ClientCredentials.Windows.ClientCredential.UserName = "";            client.ClientCredentials.Windows……

还不知道怎么设置用户名和密码,学习一下。

#7


引用 2 楼 fangxinggood 的回复:
如果是 <security mode="None"> 得是 BasicHttpBinding。

貌似改了之后,还要在wcf服务端web.config中的endpoint节点中加入bindingConfiguration="WSHttpBinding_IZiDianService1"

#8


引用 3 楼 C_htp 的回复:
很明显、要进行验证、
可以像楼上说的、把验证模式设为none
或者客户端访问服务的时候给服务端的用户名跟密码(Windows用户)
client.ClientCredentials.Windows.ClientCredential.UserName = "";
            client.ClientCredentials.Windows.ClientCredential.Password = "";
感觉这个最靠谱,有验证才是王道