获取WCF服务(主机/客户端)以使用Mono

时间:2015-07-16 10:06:20

标签: linux wcf https mono

我有一个小型测试控制台应用程序,用作WCF主机和另一个用作客户端的控制台应用程序。

客户端可以通过http访问主机,到目前为止一切正常。 但是当切换到https时,我收到以下错误:

Error: System.Net.WebException: Error: SendFailure (Error writing headers) --->
System.Net.WebException: Error writing headers --->
System.IO.IOException: The authentication or decryption has failed. --->
Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.
...

到目前为止我试图解决这个问题的步骤:

  • 我已确认已安装ca-certificates-mono软件包
  • 我已将CA证书导入到机器商店中(如果我使用自签名证书,为什么需要这样做?)

    sudo mozroots --import --machine --sync

  • 我创建了一个用于测试的自签名证书(如Mono Security FAQ中所述)

    makecert -r -eku 1.3.6.1.5.5.7.3.1 -n "CN=Cert4SSL" -sv cert.pvk cert.cer

  • 我将它添加到单一证书商店

    sudo certmgr -add -c -m Trust cert.cer

    我还对其他商店(Root,My)进行了测试,也没有使用机器,但用户的商店 - 没有用,每次尝试时都出现同样的错误

  • 我将服务使用的端口分配给证书

    httpcfg -add -port 6067 -cert cert.cer -pvk cert.pvk

  • 我添加了忽略证书验证

    ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true;

    这也没有帮助(但它被调用,证书对象在调试器中看起来很好)。

客户端使用此代码调用WebService:

IService svcClient2 = null;
string address2 = "https://localhost:6067/TestService";
BasicHttpBinding httpBinding2 = new BasicHttpBinding();
httpBinding2.TransferMode = TransferMode.Buffered;
httpBinding2.Security.Mode = BasicHttpSecurityMode.Transport;
httpBinding2.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
httpBinding2.MessageEncoding = WSMessageEncoding.Text;
httpBinding2.UseDefaultWebProxy = true;
ChannelFactory<IService> channelFac2 = new ChannelFactory<IService>( httpBinding2, new EndpointAddress( address2 ) );
svcClient2 = channelFac2.CreateChannel();
string res2 = svcClient2.TestHello( "Bob" );   // <----- this is where I get the exception

感谢任何帮助,我觉得自己喜欢圈赛。

关于环境的一些信息: 我使用的是Ubuntu 14.04 LTS和Mono 4.0.2,IDE是MonoDevelop

编辑:我现在用visual studio和C#构建了相同的项目,它按预期工作。客户端可以通过http和https连接到主机。 如果我将单声道版本复制到我的Windows机器上,我会遇到与Ubuntu相同的问题和错误消息。

这可能与单声道有关吗?

0 个答案:

没有答案