1

几天以来,我一直在努力追随。请帮我。我正在使用带有 .Net 3.5 的 XP 机器。我正在关注这个例子http://msdn.microsoft.com/en-us/library/ms729789.aspx。我使用http://msdn.microsoft.com/en-us/library/ms733813(v=vs.90).aspx创建了一个证书,并在证书(本地计算机)> 受信任的根证书颁发机构 > 证书中导入了根证书和证书(本地计算机)>个人>证书中的另一个。我有自托管服务。软管代码是

        ServiceHost svcHost = new ServiceHost(typeof(CalculatorService.CalculatorService), new  Uri("https://localhost:8012/CalculatorService"));           
        ServiceMetadataBehavior smb = svcHost.Description.Behaviors.Find<ServiceMetadataBehavior>();
        if (smb == null)
            smb = new ServiceMetadataBehavior();
        smb.HttpsGetEnabled = true;
        smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
        svcHost.Description.Behaviors.Add(smb);
        svcHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
            MetadataExchangeBindings.CreateMexHttpsBinding(),
            "mex");
        WSHttpBinding b = new WSHttpBinding();
        b.Security.Mode= SecurityMode.Transport;
        b.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
        svcHost.AddServiceEndpoint(typeof(CalculatorService.ICalculator),b , "");
        svcHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySubjectName, "SignedByCA");
        svcHost.Open();
        Console.WriteLine("The service is ready.");
        Console.WriteLine("Press <ENTER> to terminate service.");
        Console.WriteLine();
        Console.ReadLine();
        svcHost.Close();

当我尝试在客户端中添加引用时,出现以下错误。

下载“https://localhost:8012/CalculatorService/mex”时出错。底层连接已关闭:发送时发生意外错误。身份验证失败,因为远程方已关闭传输流。元数据包含无法解析的引用:“https://localhost:8012/CalculatorService/mex”。向https://localhost:8012/CalculatorService/mex发出 HTTP 请求时出错. 这可能是由于在 HTTPS 情况下未使用 HTTP.SYS 正确配置服务器证书。这也可能是由于客户端和服务器之间的安全绑定不匹配造成的。底层连接已关闭:发送时发生意外错误。身份验证失败,因为远程方已关闭传输流。如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。

我想我已经尝试了所有可能的方法。现在,我一点头绪都没有。请帮我。你是我最后的资源。

4

0 回答 0