如何动态设置使用 SSL 的 .Net 3.5 Web 服务?

Posted

技术标签:

【中文标题】如何动态设置使用 SSL 的 .Net 3.5 Web 服务?【英文标题】:How can I dynamically set a .Net 3.5 Web Service that uses SSL? 【发布时间】:2013-09-29 19:30:27 【问题描述】:

我正在编写一个需要连接到 Web 服务的应用程序。在某些情况下,我需要切换端点地址。

我认为当地址需要更改时,这就像更改System.ServiceModel.Description.ServiceEndpoint 一样简单。但是,当我这样做时遇到了一个异常,因为一个地址需要 SSL,而另一个地址不需要。

我如何正确更新网络服务端点地址?

注意:这是一个 C#、.Net 3.5 项目。

【问题讨论】:

这对你有用吗? ***.com/questions/1978962/… 抱歉我的无知,代理从哪里来? 读一读:msdn.microsoft.com/en-us/library/ms733133.aspx. 您是连接到 wcf 服务还是 xml Web 服务? 它是 XML,但它是一种旧的 ASP.net 形式的 Web 服务。 【参考方案1】:

好的,我找到了解决方案。当 Visual Studio 为您的服务生成包装类时,[ServiceName]SoapClient 有一个构造函数,该构造函数将绑定和端点作为参数。定义这些并将它们传递给构造函数。

这是一个伪示例。

    void InitializeMyWebService(bool useSSLSite)
    
        BasicHttpBinding b = useSSLSite ? 
            new BasicHttpBinding(BasicHttpSecurityMode.Transport) : 
            new BasicHttpBinding();

        EndpointAddress e = useSSLSite ? 
            new EndpointAddress("https://www.example.com/svc/MyWebService.asmx") :
            new EndpointAddress("http://intranet_server/svc/MyWebService.asmx");

        myWebService = new MyWebServiceSoapClient(b, e);
    

MyWebService 现在可以工作了,正如我们方法的 userSSLSite 参数所定义的那样。

【讨论】:

以上是关于如何动态设置使用 SSL 的 .Net 3.5 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据请求域动态设置 SSL 证书?

在 .Net 3.5 中使用动态关键字

将代码从 .net 4.0 回滚到 .net 3.5,现在动态不起作用

使用 OpenSUSE / Yast 设置 Apache w/SSL

.net 3.5 中的反序列化对象

尝试从 .NET 3.5 获取异常代码但未成功