【问题标题】:Ajax call to wcf windows service over ssl (https)通过 ssl (https) 对 wcf windows 服务的 Ajax 调用
【发布时间】:2010-03-06 13:36:25
【问题描述】:

我有一个 Windows 服务,它通过 http 公开一个端点。同样,这是一个 Windows 服务(不是托管在 iis 中的 Web 服务)。然后我使用 javascript/ajax 从这个端点调用方法。一切正常,这是我在 Windows 服务中用于创建端点的代码:

        //Create host object
        WebServiceHost webServiceHost = new WebServiceHost(svcHost.obj, new Uri("http://192.168.0.100:1213"));

        //Add Https Endpoint
        WebHttpBinding binding = new WebHttpBinding();
        webServiceHost.AddServiceEndpoint(svcHost.serviceContract, binding, string.Empty);


        //Add MEX Behaivor and EndPoint
        ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
        metadataBehavior.HttpGetEnabled = true;
        webServiceHost.Description.Behaviors.Add(metadataBehavior);
        webServiceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

        webServiceHost.Open();

现在,我的目标是让相同的模型在 SSL 上运行(https 不是 http)。因此,我遵循了几个 msdn 页面的指导,如下所示:

http://msdn.microsoft.com/en-us/library/ms733791(VS.100).aspx

我使用 makecert.exe 创建了一个名为“bpCertTest”的测试证书。然后我使用 netsh.exe 用我创建的测试证书配置我的端口(1213),一切都没有问题。然后,我修改了 Windows 服务中的端点代码,以便能够通过 https 工作,如下所示:

        //Create host object
        WebServiceHost webServiceHost = new WebServiceHost(svcHost.obj, new Uri("https://192.168.0.100:1213"));

        //Add Https Endpoint
        WebHttpBinding binding = new WebHttpBinding();
        binding.Security.Mode = WebHttpSecurityMode.Transport;
        binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
        webServiceHost.AddServiceEndpoint(svcHost.serviceContract, binding, string.Empty);
        webServiceHost.Credentials.ServiceCertificate.SetCertificate("CN=bpCertTest", StoreLocation.LocalMachine, StoreName.My);


        //Add MEX Behaivor and EndPoint
        ServiceMetadataBehavior metadataBehavior = new ServiceMetadataBehavior();
        metadataBehavior.HttpsGetEnabled = true;
        webServiceHost.Description.Behaviors.Add(metadataBehavior);
        webServiceHost.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, MetadataExchangeBindings.CreateMexHttpsBinding(), "mex");

        webServiceHost.Open();

服务成功创建端点,在 SetCertificate() 调用中识别我的证书,服务启动并成功运行。

现在,问题是我的 javascript/ajax 调用无法通过 https 与服务通信。我只是得到一些通用的通信错误(12031)。因此,作为测试,我将我在 javascript 中调用的端口更改为其他一些随机端口,我得到了同样的错误 - 这告诉我显然我什至没有通过 https 访问我的服务。

在这一点上我完全不知所措,我觉得一切都已经到位,我只是看不出问题出在哪里。如果有人在这种情况下有经验,请提供您的见解和/或解决方案!

谢谢!

【问题讨论】:

  • 也有可能是浏览器不信任 SSL 证书 CN=bpCertTest,如果它是为测试而创建的自签名证书,或者发出的地址与您要传递给服务主机的 Uri。

标签: ajax wcf windows-services https


【解决方案1】:

我在这里遇到了同样的问题。当您的当前页面是 http 时,您似乎无法对 https 页面进行 ajax 调用。就像您不能调用其他域一样。违反了 SOP http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_SOP

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多