我继承了一个使用 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 地址,我会得到预期的元数据页面。
我有什么明显的遗漏吗?