none
异常:传出消息标识检查失败。所预期的远程终结点的 DNS 标识为“localhost”... RRS feed

  • 问题

  • 在对服务设置证书后,发现此问题,通过搜索发现可以在客户端指定相应的dns名称,可以解决。但是我不想在客户端来解决,我想在服务端来解决,不知道如何处理?有没有人遇到过?
    2010年8月30日 2:15

答案

全部回复

  • 这个服务端的把Identity里的DNS给移掉。

    换个别的应该也可以。

     

    但是 就怕 你客户端的配置文件里已经指定了服务的Identity是基于DNS的,这个就不好办了。服务端必须和客户端的一致。

    如果客户端没指定的话,我猜测,服务端也可以不使用。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    老徐的博客】:http://www.cnblogs.com/frank_xl/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    2010年8月30日 13:40
    版主
  • 我明白客户端与服务端dns要保持一致,现在我要调整服务端的dns设置,一直也没有成功,不知道怎么弄,是不是在设置证书后,服务端的dns不能变动了,还是可以通过什么方法来调整? 代码类似如下: 服务端: myServiceHost = new ServiceHost(typeof(GetTest)); myServiceHost.Credentials.ServiceCertificate.SetCertificate("CN=test1", System.Security.Cryptography.X509Certificates.StoreLocation.LocalMachine, System.Security.Cryptography.X509Certificates.StoreName.My); NetTcpBinding myBinding = new NetTcpBinding(); myBinding.Security.Mode = SecurityMode.Message; myBinding.Security.Message.ClientCredentialType =MessageCredentialType.None; Uri baseAddress = new Uri(net.tcp://localhost:8056/WCFService/); ServiceEndpoint ep = myServiceHost.AddServiceEndpoint(typeof(IGetTest), myBinding, baseAddress); //这段代码似乎也改变不了 //EndpointAddressBuilder addressBuilder = new EndpointAddressBuilder(ep.Address); //addressBuilder.Identity = EndpointIdentity.CreateDnsIdentity(test.com); //ep.Address = addressBuilder.ToEndpointAddress(); myServiceHost.Open(); Console.WriteLine(Service started!); Console.ReadLine(); myServiceHost.Close(); 客户端: NetTcpBinding myBinding = new NetTcpBinding(); myBinding.Security.Mode = SecurityMode.Message; myBinding.Security.Message.ClientCredentialType=MessageCredentialType.None; EndpointAddress ea = new EndpointAddress(net.tcp://localhost:8056/WCFService/GetTest); GetTestClient gc = new GetTestClient(myBinding, ea); gc.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode = System.ServiceModel.Security.X509CertificateValidationMode.None; string result = gc.GetValue(); Console.WriteLine(result); Console.ReadLine();
    2010年8月31日 0:24
  • 代码不好排啊。
    2010年8月31日 5:23
  • 重新创建证书,使SubjectName 为 "CN=localhost"。看看是否能解决问题。


    Mog Liang
    2010年9月1日 3:43
  • 重新创建证书,使SubjectName 为 "CN=localhost"。看看是否能解决问题。


    Mog Liang
    那证书的SubjectName不就变得固定了。
    2010年9月1日 7:59
  • 你现在是测试环境。当部真正署时,证书是应该和服务器域名保持一致的吧。


    Mog Liang
    2010年9月1日 8:28
  • 你现在是测试环境。当部真正署时,证书是应该和服务器域名保持一致的吧。


    Mog Liang
    为什么要和服务器域名保持一致?
    2010年9月1日 9:03
  • 我不是完全了解。在HTTPS protocol中,服务器的证书Subject要求要和域名保持一致,负责就被认为站点不安全。比如,你浏览 https://www.verisign.com ,查看一下他的证书。

    你使用的WCF Message Security也会有类似的要求,但是并非强制,好像可以通过修改客户端endpoint dns identity来指定期望的dns地址。


    Mog Liang
    2010年9月1日 9:22
  • 看来没有办法的话,只能调整客户端的endpoint dns identity了。
    2010年9月2日 0:24