我继承了一个使用WCF服务的Silverlight应用程序,并且托管在ASP.NET Web表单中。应用程序需要通过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访问都会失败,并且会有404s。使用Fiddler,我可以看到只有URI方案正在改变,如果我输入服务的HTTPS地址,我会得到预期的元数据页面。
有什么明显的东西我不见了吗?
答案 0 :(得分:0)
叹气用湿鲱鱼打我。 Web服务的HTTPS绑定已在web.config中注释掉了(因为并非所有客户都可以/想要在他们的服务器上运行HTTPS,并且在没有为HTTPS配置IIS时为HTTPS配置WCF绑定会在很多噪声中使用WCF方式)。
令人惊讶的是,良好的睡眠可以为问题带来新鲜的视角和清晰度。