1

我继承了一个使用 WCF 服务并托管在 ASP.NET Web 表单中的 Silverlight 应用程序。该应用程序需要通过 HTTP 和 HTTPS 运行,并将安装在客户自己的服务器上。客户端代码最初是使用指向本地托管服务的 Add Service Reference 生成的,所以我的 ServicesReferences.ClientConfig 显然包含对 localhost 的硬编码引用 - 部署到另一台服务器时用处不大,所以显然我需要能够以编程方式设置客户端使用的端点地址。

我的代码目前是:

var binding = new BasicHttpBinding
    {
        MaxBufferSize = 2147483647,
        MaxReceivedMessageSize = 2147483647,
    };
binding.Security.Mode = HtmlPage.Document.DocumentUri.Scheme.StartsWith("https")
    ? BasicHttpSecurityMode.Transport
    : BasicHttpSecurityMode.None;

var documentUri = HtmlPage.Document.DocumentUri;
var builder = new UriBuilder(
        documentUri.Scheme,
        documentUri.Host, 
        documentUri.Port, 
        documentUri.LocalPath.Replace("hostpage.aspx", "MyService.svc"));

var client = new CustomerDetailServicesClient(binding, new EndpointAddress(builder.Uri));
client.ChannelFactory.Faulted += OnChannelFactoryFaulted;
client.DoSomething();

虽然这在我使用 HTTP 时工作正常,但每次调用 WCF 服务时尝试通过 HTTPS 访问都会失败,并出现 404。使用 Fiddler,我可以看到只有 URI 方案在发生变化,如果我输入服务的 HTTPS 地址,我会得到预期的元数据页面。

我有什么明显的遗漏吗?

4

1 回答 1

0

了口气,用湿鲱鱼扇了我一巴掌。Web 服务的 HTTPS 绑定已在 web.config 中注释掉(因为并非我们所有的客户都可以/想要在他们的服务器上运行 HTTPS,并且当 IIS 未配置为 HTTPS 时,为 HTTPS 进行 WCF 绑定会在很多嘈杂的情况下破坏 WCF方法)。

令人惊奇的是,一夜好眠可以带来什么样的全新视角和清晰的解决方案。

于 2012-04-16T22:55:21.360 回答