以编程方式将Silverlight连接到WCF

时间:2012-04-16 08:08:39

标签: c# .net wcf silverlight

我继承了一个使用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地址,我会得到预期的元数据页面。

有什么明显的东西我不见了吗?

1 个答案:

答案 0 :(得分:0)

叹气用湿鲱鱼打我。 Web服务的HTTPS绑定已在web.config中注释掉了(因为并非所有客户都可以/想要在他们的服务器上运行HTTPS,并且在没有为HTTPS配置IIS时为HTTPS配置WCF绑定会在很多噪声中使用WCF方式)。

令人惊讶的是,良好的睡眠可以为问题带来新鲜的视角和清晰度。