我在以编程方式创建的 WebForms 应用程序中有一个 WCF 服务。该服务的定义如下:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class ECConfigService : IECConfigService
其中 IECConfigService 是我的服务合同。服务路由是在global.asax中动态添加的:
System.Web.Routing.RouteTable.Routes.Add(
new System.ServiceModel.Activation.ServiceRoute(
"ECConfigService",
new System.ServiceModel.Activation.WebServiceHostFactory(),
typeof(ECConfigService.ECConfigService)));
该服务工作正常,但我想将其限制为仅 HTTPS。我怎样才能以编程方式做到这一点?我发现的所有示例都使用 web.config 设置服务,并且不通过代码添加路由。
理想情况下,我想要一种在运行时(初始化)确定是否允许 HTTP 的方法,但如果我必须仅硬编码 HTTPS,那是可以接受的。
我有一个想法,你可以参考:
由于您不想使用 HTTP 并使用 HTTPS,您可能需要像这样设置配置文件:
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpsGetEnabled="true" httpGetEnabled="false"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
这里无法使用http获取元数据。
代码可以参考这个:
Dim behavior As New ServiceMetadataBehavior()
behavior.HttpsGetEnabled = True
behavior.HttpGetEnabled = False '
selfHost.Description.Behaviors.Add(behavior)